Writing and teaching Flutter From the basics of Dart and Flutter to advanced topics with simple, but detailed examples.Flutter by Example has been publishing tutorials since 2017, when Flutter was still in it's alpha stage. Last updated in Summer 2020.Real world examples and tutorials. And it'll always be free.
Overview
Syllabus
- Part 1:Dart
- Getting Started with Dart
- About Dart
- Install Dart on your machine
- Dartpad
- Text Editors: Intellij and VSCode
- Resources: Documentation and Pub.dev
- Hello World
- The main function
- Print to the console
- Dart Fundamentals
- Values and variables
- Comments
- const and final variables
- Arithmetic and Comparison Operators
- Assignment Operators
- Logical Operators
- Null Aware Operators
- Type Test Operators
- Bitwise and Shift Operators
- Control Flow: if, else, else if
- Switch statements and case
- Ternary Conditional operator
- Loops: for and while
- Anatomy of Dart Functions
- Arrow functions
- Function arguments: default, optional, named
- Lexical Scope
- Cascade notation
- Data Types
- Intro to Dart's Type System
- Numbers
- Strings
- Booleans
- dynamic
- lists
- sets
- maps
- Object-Oriented Programming
- Intro to OOP
- Classes
- Constructors
- Properties and methods
- Methods: static, private, etc
- Getters and setters
- Extending classes (inheritance)
- Initializer lists and final properties
- Factory methods
- Singletons
- Abstract classes (and interfaces)
- Mixins
- Extension methods
- Iterables, Iterators, and Collections
- What are collections (and iterables)?
- Looping: for-in and forEach
- Reading elements pt 1: first, last
- Adding elements: add and insert (all)
- Checking for elements: contains, indexOf, any, every
- Removing elements: remove, clear, removeWhere
- Filtering elements: where, takeWhile, and skipWhile
- Changing elements: map and expand
- Deriving values from elements: fold, reduce, join
- Type casting collections: cast, as, retype, toSet, toList
- Iterators: understanding and creating your own
- Iterable-like methods on maps (and putIfAbsent)
- Getting Started with Dart
- Part 2: Flutter
- Getting started with Flutter
- About Flutter
- IDEs and resources
- Widgets
- Intro to Widgets
- Widget types: Stateful and Stateless
- StatefulWidget lifecycle
- The Widget tree
- BuildContext
- Inherited Widgets
- Thinking in widgets
- Intro Flutter App
- Intro and Setup
- Data Model and HTTP
- Build a custom widget
- ListView and builder pattern
- Gradient Backgrounds
- Routing: Add a detail page
- Routing 2: Add a form page
- User Input
- Sliders and Buttons
- Snackbars and Dialogs
- Built-in Animation: AnimatedCrossFade
- Built-in Animation: Hero transition
- Custom Animation: Progress Indicator
- Intro and Overview
- Build the example app boiler-plate
- Custom Widget: Peg
- Tween and AnimationController classes
- Tween by example
- Using Tweens and Intervals
- Wrap the Pegs in AnimatedWidgets
- Bring it all together
- State Management: Blocs without Libraries
- What are blocs?
- Calendar App introduction
- Create bloc one
- Create a bloc provider
- Using StreamBuilders with blocs
- Create bloc two: Add/Edit Tasks
- Consume the second bloc's streams
- Complete source code
- State Management: Provider
- What is Provider?
- The most basic example using Provider
- ChangeNotifierProvider
- Rebuilding widgets with Consumer
- Finer build control with Selector
- Future Provider
- MultiProvider micro lesson
- Stream Provider
- Using context extensions for more control
- ProxyProvider
- Using .value constructors
- The final example (A shopping cart app)
- For the curious: How is provider implemented
- Handling Data with Brick: Offline First with Rest
- About Brick and setup
- Adding a Repository
- Adding a Model
- Generating Code
- Rendering Models
- Adding an Association
- Getting started with Flutter