Dart And Flutter The Complete Developers Guide

Everything you need to know for building mobile apps with Flutter and Dart, including RxDart and Animations!

Last updated 2022-01-10 | 4.5

- Build beautiful multi-screen apps with Flutter
- Understand the different approaches for loading and maintaining data in Flutter apps
- Create and publish open source projects using Dart

What you'll learn

Build beautiful multi-screen apps with Flutter
Understand the different approaches for loading and maintaining data in Flutter apps
Create and publish open source projects using Dart
Learn how to build offline-enabled apps with incredibly efficient data loading
Comprehend the best method for reading the incredible amount of Flutter documentation
Store long-term data on a user's physical device using SQLite
Master streams and understand reactive programming to create Flutter apps

* Requirements

* Previous programming experience with Javascript
* Java
* Python
* or similar is required .

Description

If you're tired of spinning your wheels learning Swift or Android, this is the course for you.

Animations? You will learn it.  Architectural Patterns? Included.  Navigation? Of course!

Flutter is a newcomer to the mobile development scene.  Strongly supported by Google, it is already viewed as an ideal platform for replacing native Swift and Android development.  Thanks to its amazing standard library of widgets, fast compile times, and amazing documentation, developers are falling in love with Flutter!  

This course supports MacOS and Windows - develop Android and iOS apps easily!

Flutter apps are created using the language Dart.  No problem if you're not already familiar with Dart; this course includes a lightning fast introduction to Dart at the beginning, along with hours of bonus lectures at the end of the course solely focused on Dart and its advanced features.  If you come from a background working with Java, Ruby, or Javascript, you'll feel right at home with Dart - the syntax is nearly identical, only a few core concepts need to be learned.  Dart is a strongly typed language - but don't be discouraged if you're not a fan of strong types!  I spend special time in this course to make it extra clear why developing with a strongly typed language is a breeze!

One of the greatest challenges around developing Flutter applications right now is understanding how to design and architect apps.  Flutter is still in rapid development, and the community at large is still trying to find out the best techniques.  With this in mind, special attention is paid in the course to making sure you understand the primary design patterns advocated by Google's Flutter team, including both the 'Stateful Widget' pattern and the 'BLOC' pattern.  The 'BLOC' pattern makes heavy use of Reactive Programming techniques, which you'll learn about in this course as well.  These techniques can be easily applied to other languages and frameworks as well - talk about a bonus!

Of course, no mobile app is complete without some nice looking animations.  You'll learn how to build animations using Flutter's standard library of tools, which can be easily used to make interactions that your users will love.  You should plan to complete the course with knowledge of how to reference Flutter's standard library of widgets to assemble complex animations.

Sign up today and you will:

  • Understand the Dart language and its primary features
  • Store information for long periods of time on the user's device with offline storage
  • Learn how to optimize network requests for improved performance on mobile networks
  • Delight your users with complex animations
  • Expose the functionality of your apps with multi-screen navigation
  • Steer through the incredible amount of Flutter documentation
  • Master Reactive Programming with streams by using RxDart
  • Implement advanced design patterns advocated by Google's official Flutter team
  • Handle user input with form validation
  • Learn to build open source Dart packages and distribute them to other developers

I've built the course that I would have wanted to take when I was learning Flutter. A course that explains the concepts and how they're implemented in the best order for you to learn and deeply understand them.


Who this course is for:

  • Developers looking to build quality apps with Flutter

Course content

26 sections • 402 lectures

How to Get Help Preview 01:03

Course Resources Preview 00:38

Join Our Community! Preview 00:07

Course Organization Preview 03:29

Dart Overview Preview 02:43

The Dartpad Editor Preview 02:18

Our First Program Preview 02:32

Pulling the Pieces Apart Preview 02:44

Functions in Dart Preview 03:36

Introduction to Types Preview 08:36

Why Use Types? Preview 05:36

String Interpolation Preview 03:19

Object Oriented Programming in Dart Preview 03:12

Creating Classes Preview 04:33

Creating Class Instances Preview 03:57

Constructor Functions Preview 07:26

Review on Constructors Preview 03:41

App Overview Preview 01:12

OOP Design Flow Preview 03:19

Adding Fields to Classes Preview 05:59

Associated Methods Preview 01:22

More Initialization with Constructors Preview 02:52

For Loops Preview 03:08

Adding Elements to Lists Preview 03:56

More on Variable Initialization Preview 04:46

Customizing Print Statements Preview 03:35

ToString on Cards Preview 04:30

Shuffling a List Preview 06:11

Annotating Argument Types Preview 04:42

Filtering Lists Preview 03:46

Annotating Argument Types Preview 02:39

Filtering Lists Preview 05:49

Shorthand Function Syntax Preview 07:14

Removing Individual Records Preview 02:45

RemoveCard Implementation Preview 06:08

Named Parameters Preview 04:00

Flutter Setup on MacOS Preview 02:01

SDK Extraction Preview 02:02

Editing the PATH Variable Preview 07:46

XCode License Preview 01:24

Generating Flutter Projects Preview 01:20

Android Setup on MacOS Preview 01:57

Android Dependencies Preview 01:17

Android Project Setup Preview 01:13

More Android Dependencies! Preview 01:25

Android Emulator Creation Preview 01:51

Flutter Startup Preview 01:27

Finished Android Setup Preview 00:23

Flutter Install Preview 03:39

More Flutter Installation Preview 02:47

Android Install Preview 00:47

Additional Dependencies Preview 01:03

Generating a Project Preview 00:53

Selecting an Image Preview 01:49

Starting the Emulator Preview 03:18

Finishing Android Setup Preview 00:23

Code Editor Setup Preview 00:41

What's Flutter About, Anyways? Preview 05:53

App Overview Preview 02:07

The Four Step Design Process Preview 04:14

Import Statements Preview 04:36

Creating Widgets Preview 04:56

Displaying Content on Screen Preview 02:30

Showing a Scaffold Preview 06:09

Customizing the App Bar Preview 03:57

Named Parameter Clarification Preview 05:02

Required Parameters Preview 03:19

Child Parameters Preview 02:17

Displaying Icons Preview 05:48

Adding Custom Widgets Preview 03:49

Stateless vs Stateful Widgets Preview 04:15

The Build Method Preview 04:00

Local Import Statements Preview 05:34

Quick Breather and Review Preview 03:17

Refactoring Stateless to Stateful Preview 05:41

More Refactoring to Stateful Widgets Preview 08:38

Photos API Preview 03:06

Working with JSON Preview 05:25

Casting JSON to Model Instances Preview 04:02

Named Constructors Preview 06:36

Adding an Image Model Preview 05:44

Function References Preview 03:41

The HTTP Package Preview 04:08

Issuing HTTP Requests Preview 02:54

Handling Dart Futures Preview 07:50

Parsing Future Responses into a Model Preview 04:17

Updating the AppState Widget Preview 03:41

Building Lists of Widgets Preview 04:57

Sending Images to the ImageList Preview 03:35

The Final Keyword Preview 05:32

Building Lists with ListView Preview 05:55

Listing URL's Preview 01:38

Text to Images Preview 03:56

Containers for Positioning Preview 08:07

Adding Border Style Preview 07:18

Column Widgets for Layout Preview 09:18

Selective Padding Preview 05:05

App Review Preview 04:47

App Overview Preview 05:26

Boilerplate App Code Preview 04:50

Creating the Login Screen Preview 06:32

More Container Styling Preview 04:30

Labels and Hint Text Preview 08:45

Customizing Keyboard Type Preview 03:21

Handling Password Inputs Preview 05:09

Displaying Buttons with RaisedButton Preview 04:11

Changing Widget Colors Preview 01:35

Layout Control Preview 08:05

Form Validation Preview 03:44

Referencing Widgets with Global Keys Preview 04:24

The Form Widget and FormState Preview 05:18

Creating a Global Key Preview 02:09

Referencing FormState with Global Keys Preview 04:30

Validating via FormState Preview 05:55

Triggering Validation Preview 06:37

Retrieving Form Values Preview 06:31

Final Form Submittal Preview 04:02

Code Reuse with Mixins Preview 03:53

Mixin Validator Implementation Preview 05:10

A Quick Detour Preview 01:00

Streams by Analogy Preview 05:59

Characteristics of Streams Preview 04:08

StreamControllers and Sinks Preview 05:18

Mapping a Stream Preview 02:39

Adding a StreamTransformer Preview 04:25

Implementing the Listener Preview 03:27

Stream Review Preview 07:51

Let's Build a Game Preview 05:35

Why Streams? Preview 09:46

Word Guessing Preview 05:32

Stream's 'Take' and 'Where' Functions Preview 06:08

Validation with Streams Preview 05:56

Email Validation Preview 04:19

Wiring up the Error Preview 04:35

BLOC's vs Stateful Widgets Preview 06:42

The Purpose of Streams with Blocs Preview 07:39

Generating a New Project Preview 00:55

App Boilerplate Preview 03:05

Second Time on LoginScreen Preview 03:13

TextFields with RaisedButtons Preview 07:48

How to Use TextFields Preview 03:17

BLOC Design for TextFields Preview 04:03

Annotating Stream Types Preview 05:01

Issues with Bloc Access Preview 06:26

Shortcut Access with Getters Preview 08:40

Public vs Private Fields Preview 07:32

Improving the BLOC Api Preview 04:07

Validation Transformers Preview 06:52

A Technicality Around Mixins Preview 04:25

Cleaning Up Controllers Preview 03:18

Bloc Application Preview 06:49

The StreamBuilder Widget Preview 11:26

Streambuilder for Password Fields Preview 04:18

Scoped Bloc Approach Preview 03:08

Provider Implementation Preview 05:37

The Provider's 'of' Function Preview 07:33

The Provider's Constructor Preview 02:16

The Provider in Action Preview 03:19

Accessing the Bloc Preview 05:32

Breather and Review Preview 05:37

Enabling Form Submission Preview 05:16

Stream Merging Possibilities Preview 04:07

Introducing RxDart Preview 04:13

More on RxDart Preview 05:52

The CombineLatest Function Preview 10:06

CombineLatest in Action Preview 06:38

More on StreamBuilder Preview 03:38

Interpreting Stream Values Preview 05:57

Broadcast Streams Preview 04:41

Disabled by Default Preview 03:13

Replacing Controllers with Subjects Preview 08:20

Review of BLOCs Preview 03:23

App Overview Preview 02:52

Animation Library Classes Preview 10:37

App Boilerplate Preview 02:47

StatefulWidgets for Animations Preview 04:19

Widget Structure Preview 02:26

Displaying a Cat Preview 03:44

The InitState Method Preview 03:54

Declaring the TickerProvider Preview 05:45

Tweens with Curves Preview 05:43

Performance Savings with AnimatedBuilder Preview 05:02

Nature of Animation Preview 07:01

Starting the Animation Preview 01:47

Watching for Taps with GestureDetector Preview 04:59

Reversing Animation States Preview 06:34

Building the Box Preview 03:26

Layouts with the Stack Widget Preview 02:43

Order of Drawing Widgets Preview 02:51

Add Center Widget Preview 03:32

Positioned Widgets Preview 11:06

Expanding Stack Dimensions Preview 06:57

Three Reasons for Strange Layouts Preview 07:16

Positioned Constraints Preview 03:57

Negative Offsets Preview 03:56

Stack Clip Settings Preview 03:45

Adjusting Tween Ranges Preview 02:18

Adding Box Flaps Preview 03:28

Rotating Widgets Preview 06:13

Rotation by Radians Preview 06:14

Changing Rotation Point Preview 03:37

A Touch of Positioning Preview 05:18

BoxAnimation Controller Preview 06:59

Adding Animated Builders Preview 06:27

Resetting Animations Preview 04:09

Constraining Animation Range Preview 04:20

Adding the Right Flap Preview 03:14

Negative Rotation Values Preview 04:05

Toggling Animation State Preview 02:36

Animation Wrapup Preview 02:49

App Overview Preview 03:08

Hacker News API Preview 08:50

More API Challenges Preview 08:03

API Performance Strategy Preview 08:27

Creating the ItemModel Class Preview 08:38

A Few More ItemModel Properties Preview 05:24

API Provider Implementation Preview 06:45

Fetching Individual Items Preview 08:32

Testing with Dart Preview 04:43

A Few Imports Preview 05:09

Writing Expectations Preview 05:22

Mocking HTTP Requests Preview 05:52

Returning JSON Preview 05:42

Testing FetchItem Preview 05:17

SQLite DB Provider Preview 04:03

Database Imports Preview 04:27

Async Constructors Preview 02:21

Creating a DB Connection Preview 05:09

Creating Tables with SQLite Preview 03:41

Adding Table Columns Preview 04:22

Issuing Queries Preview 07:55

Multiple Named Constructors Preview 04:31

Massaging DB Return Maps Preview 04:30

Turning Class Instances to Maps Preview 08:41

Implementing the Repository Preview 04:05

More on the Repository Preview 07:08

Type Annotations Preview 06:12

Casting Lists Preview 03:31

More on the Repository Preview 02:45

Abstract Classes Preview 07:02

The Need for Abstract Classes Preview 04:27

Why Abstract Classes? Preview 07:34

More on Abstract Classes Preview 07:02

Repository Interface Design Preview 07:16

Defining the Source Preview 05:52

Cache Definitions Preview 02:08

Lists of Sources and Caches Preview 03:30

Ultimate Reusability Preview 04:05

Quick Gotcha Preview 02:18

Another Quick Gotcha! Preview 01:07

FetchTopIds Implementation Preview 02:28

App Setup Preview 02:45

A Touch of Boilerplate Preview 02:45

Data Fetching Concerns Preview 10:12

Solution Outline Preview 03:21

FutureBuilder in Action Preview 12:04

The Stories Provider Preview 06:02

Bloc Design Preview 06:49

Exposing Bloc Getters Preview 03:32

Wiring up the Stories Provider Preview 03:19

Bloc Testing Preview 07:51

Type Annotations Solve Problems Preview 03:22

Circular Progress Indicator Preview 03:20

Item Fetching Architecture Preview 07:01

Giant Gotcha with StreamBuilder Preview 08:33

Giant Gotcha Solution Preview 07:16

Implementing ScanStreamTransformer Preview 05:38

Finishing the ScanStreamTransformer Preview 02:27

Adding the Items Controller Preview 03:49

A Gotcha Around Streams? Impossible! Preview 03:28

Single Transformer Application Preview 03:46

The ListView Tile Preview 04:07

StreamBuilder Setup Preview 03:27

Wrapping Up the FutureBuilder Preview 03:56

Double Gotcha! Preview 03:56

Stream Subscriptions Preview 10:01

Stream Subscription Fix Preview 01:13

Additional Streams Preview 02:37

A Laborious Refactor Preview 08:42

Result of Refactor Preview 02:28

Quick Debug Session Preview 03:57

Resolving Database Conflicts Preview 09:00

Building Story Tiles Preview 05:18

Comments Icon Preview 04:43

Applying Dividers with Height Preview 05:36

Loading Container Stand-in Preview 03:23

Building the Loading Container Preview 04:20

Showing the Loading Container Preview 02:55

Long-Lived Cache Values Preview 02:35

Swipe to Refresh Indicator Preview 02:54

Implementing a Refresh Widget Preview 04:33

Clearing Database Tables Preview 07:51

Communicating a Future to onRefresh Preview 08:22

Navigation in Flutter Preview 04:05

Map Based Routing Preview 05:56

OnGenerateRoute-Based Navigation Preview 03:39

OnGenerateRoute Implementation Preview 06:34

Navigating in Style! Preview 10:05

A PageRoute for NewsDetail Preview 07:25

A Scaffold in NewsDetail Preview 03:41

Parsing Route Settings Preview 04:42

The Comments Bloc Provider Preview 06:04

Comments Bloc Design Preview 05:11

More on Comments Bloc Preview 07:35

Recursive Data Fetching Preview 12:46

Quick Fix Preview 00:17

Connecting the Comments Provider Preview 03:42

Testing Recursive Fetching Preview 03:22

Consuming the Item Map Preview 05:15

Displaying the Story Title Preview 05:48

Text Styling Preview 06:14

Container Alignment Preview 05:31

Building the Comments List Preview 07:29

More Logic Extraction Preview 04:38

The Comment Widget Preview 05:01

Comment's FutureBuilder Preview 03:21

Showing Individual COmments Preview 06:34

Recursive Rendering Preview 05:50

Styling the Comment List Preview 04:26

Defaulting Null Values Preview 03:37

Handling Deleted Comments Preview 02:56

Nested Comments Preview 03:26

ListTile's ContentPadding Property Preview 05:24

Replacing Placeholder Characters Preview 05:14

Loading Containers for Comments Preview 02:56

App Wrapup Preview 06:10

Last Fix! Preview 01:41

Dart Local Installation Preview 02:38

Dart Install on Mac Preview 03:23

Editor Setup for Dart Preview 03:43

App Overview Preview 02:38

Folder and File Structure Preview 06:43

The PubSpec File Preview 03:08

Running Dart Files Preview 03:58

Program Design Methodology Preview 08:15

Class Creation Preview 02:38

Terminal Design Preview 03:15

Terminal Implementation Preview 02:14

Stdout and Stdin Preview 05:17

Import Statements Preview 06:24

Stdout Instance Preview 04:35

More on Import Statements Preview 09:54

Testing the Import Class Preview 03:22

Checking Operating System Preview 03:51

Clearing Windows Terminal Preview 02:23

Clearing Other Terminals Preview 01:07

Testing ClearScreen Preview 01:22

Collecting Input Over Stdin Preview 07:11

Option Class FIelds Preview 07:07

Adding Dynamic Fields Preview 02:14

Printing Individual Options Preview 06:58

Testing Option Printing Preview 04:36

List Shortcomings Preview 04:35

Maps in Dart Preview 11:35

Refactor to Maps Preview 03:43

The Prompter Class Preview 04:00

Testing the Prompter Preview 03:54

Extracting the Terminal Preview 04:29

Var vs Final for Variables Preview 07:01

Final's Affect on Values Preview 06:01

Const's Dual Nature Preview 06:22

Const's Behavior by Type Preview 12:02

Marking Terminal as Const Preview 02:12

Private Variables Preview 07:22

Finishing Prompter Preview 05:35

Error Handling Preview 03:25

Asking Binary Questions Preview 04:04

Testing Binary Inputs Preview 04:20

Code Similarities Preview 04:33

Refactor for Code Reuse Preview 05:00

More on Private Preview 05:15

Central Lib File Preview 02:44

A Single Export Point Preview 03:09

A Relevant Example File Preview 03:16

Outstanding Project Config Preview 02:53

Uploading the Prompter Lib Preview 05:40

App Overview Preview 02:51

Project Setup Preview 04:05

Importing Library Code Preview 05:37

Forcibly Exiting a Program Preview 04:09

Prompting for File Type Preview 03:27

Implementation Flow Preview 04:13

Working with the Current Directory Preview 05:07

Filtering Non-Files Preview 07:13

Filtering Non-Images Preview 03:29

Building Options from Images Preview 06:03

Testing Image Selection Preview 02:29

Converting Images Preview 06:06

The ConvertImage Function Preview 03:03

Reading File Contents Preview 03:40

Encoding to JPG or PNG Preview 03:39

Writing Files to the Hard Drive Preview 05:33

Returning the Image Name Preview 01:42

Testing Image Conversion Preview 02:37

Opening the Image Preview 03:23