Learn Flutter Dart To Build Ios Android Apps

A Complete Guide to the Flutter SDK & Flutter Framework for building native iOS and Android apps

Last updated 2022-01-10 | 4.6

- Learn Flutter and Dart from the ground up
- step-by-step
- Build engaging native mobile apps for both Android and iOS
- Use features like Google Maps
- the device camera
- authentication and much more!

What you'll learn

Learn Flutter and Dart from the ground up
Build engaging native mobile apps for both Android and iOS
Use features like Google Maps
the device camera
authentication and much more!
Learn how to upload images and how to send manual and automated push notifications
Learn all the basics without stopping after them: Dive deeply into Flutter & Dart and become an advanced developer

* Requirements

* Basic programming language will help but is not a must-have
* You can use either Windows
* macOS or Linux for Android app development - iOS apps can only be built on macOS though
* NO prior iOS or Android development experience is required
* NO prior Flutter or Dart experience is required - this course starts at zero!


Join the most comprehensive & bestselling Flutter course and learn how to build amazing iOS and Android apps!

You don't need to learn Android/ Java and iOS/ Swift to build real native mobile apps!

Flutter - a framework developed by Google - allows you to learn one language (Dart) and build beautiful native mobile apps in no time. Flutter is a SDK providing the tooling to compile Dart code into native code and it also gives you a rich set of pre-built and pre-styled UI elements (so called widgets) which you can use to compose your user interfaces.

Flutter is extremely trending and gets used for major Google apps like their Adwords app - it's now marked as "ready for production", hence now is the time to jump in and learn it!

This course will teach Flutter & Dart from scratch, NO prior knowledge of either of the two is required! And you certainly don't need any Android or iOS development experience since the whole idea behind Flutter is to only learn one language.

You'll learn Flutter not only in theory but we'll build a complete, realistic app throughout this course. This app will feature both all the core basics as well as advanced features like using Google Maps, the device camera, adding animations and more!

With Flutter, you'll be able to write code only once and ship your apps both to the Apple AppStore and Google Play.

Use Google's Material Design to build beautiful, yet fully customizable, apps in no time with almost zero effort. You can use the rich widget suite Flutter provides to add common UI elements like buttons, switches, forms, toolbars, lists and more - or you simply build your own widgets - Flutter makes that a breeze, too.

Here's what's included in the course:

  • Detailed setup instructions for both macOS and Windows

  • A thorough introduction to Flutter, Dart and the concept behind widgets

  • An overview of the built-in widgets and how you may add your own ones

  • Debugging tipps & tricks

  • Page navigation with tabs, side drawers and stack-based navigation

  • State management solutions

  • Handling and validating user input

  • Connecting your Flutter app to backend servers by sending Http requests

  • User authentication

  • Adding Google Maps

  • Using native device features like the camera

  • Adding beautiful animations & page transitions

  • Image Upload

  • Push Notifications - manual approach and automated

  • How to publish your app to the app stores

  • And more!

This course is for you if ...

  • You're interested in building real native mobile apps for the two most popular mobile platforms - iOS and Android

  • You want to explore the full set of features Flutter offers

  • Don't want to spend hours learning two completely different languages

Course prerequisites:

  • Basic programming language knowledge will help a lot but is not a hard requirement

  • You DON'T need to know Flutter or Dart

  • You DON'T need to know iOS (Swift/ObjectiveC) or Android (Java)

Who this course is for:

  • Beginner and experienced developers who are interested in diving into mobile app development using one language for both platforms
  • Experienced iOS or Android developers who want to build cross-platform (iOS + Android) apps with one single programming language

Course content

19 sections • 399 lectures

Introduction Preview 01:48

What is Flutter? Preview 05:54

What is Flutter? What is this technology about and why is it awesome? Learn how Flutter helps you build native iOS and Android apps in this lecture!

Join our Online Learning Community Preview 00:23

Learning alone is absolutely fine but finding learning partners might be a nice thing, too. Our learning community is a great place to learn and grow together - of course it's 100% free and optional!

Understanding the Flutter Architecture Preview 04:47

We know what Flutter is, now let's take a look behind the scenes. Because it's pitch sounds a bit magic (create native cross-platform apps) - how does it work under the hood?

How Flutter & Dart Code Gets Compiled To Native Apps Preview 03:12

Let's continue our look under Flutter's hood. In this lecture, you'll learn how the Flutter & Dart code you write gets compiled to native/ machine code.

Understanding Flutter Versions Preview 02:49

Flutter is under active development, hence it's important to understand its versioning scheme and how it's kept up-to-date.

Flutter macOS Setup Preview 25:07

Let's get started with Flutter! Time to install it - in this lecture, we'll walk through the installation on macOS.

macOS Development Environment Preview 18:11

With Flutter installed on macOS, it's now time to set up the development environment, so that we can get productive as quickly as possible.

Flutter Windows Setup Preview 20:41

Let's install Flutter on Windows so that we can build amazing apps there - in this lecture, I'll walk you through all the installation steps.

Windows Development Environment Preview 17:07

With Flutter installed, let's explore how to set up a development environment that allows us to write code efficiently.

Flutter & Material Design Preview 01:15

Flutter uses Google's Material Design system - in this lecture, we'll explore what this means and what this is about.

Flutter Alternatives Preview 06:06

There actually are other technologies, which have a similar pitch as Flutter has it (build cross-platform apps with one single language or codebase). In this lecture, I'll explore some alternatives and compare Flutter to them.

Course Outline Preview 06:40

We know what Flutter is about - in this lecture you'll now find out what this course has to offer and how the content is structured.

How To Get The Most Out Of The Course Preview 02:40

To me, it's super-important that you're getting a lot out of this course - so here are some best practices on how to take the course and use the course materials.

Useful Resources & Links Preview 00:06

Module Introduction Preview 02:25

Creating a New Project Preview 05:17

An Overview of the Generated Files & Folders Preview 08:20

More on Git (Version Control System) Preview 00:26

Analyzing the Default App Preview 05:32

Dart Basics Preview 17:17

More Dart Basics Preview 13:06

Dart Basics - Summary Preview 04:57

Dart Fundamentals

Time to check your knowledge of the Dart basics!

Building an App From Scratch Preview 11:02

Running the App on an Emulator Preview 03:25

Class Constructors & Named Arguments Preview 08:35

First Summary & Additional Syntax Preview 08:10

Flutter App Basics

Is everything clear thus far? Time to check it!

Building a Widget Tree Preview 07:40

Visible (Input / Output) & Invisible (Layout / Control) Widgets Preview 03:13

Adding Layout Widgets Preview 08:47

Widget Basics

Widgets are THE core building block of Flutter apps. Is everything clear about them?

Connecting Functions & Buttons Preview 07:30

Anonymous Functions Preview 03:20

Updating Widget Data (Or: Using StatelessWidget Incorrectly) Preview 06:36

[DART DEEP DIVE] Understanding Lists Preview 01:30

Updating Correctly with Stateful Widgets Preview 11:58

Stateful & Stateless Widgets

When do you use which type of widget - and why? Time to confirm your knowledge!

A Brief Look Under The Hood Preview 02:27

Using Private Properties Preview 05:16

Creating a New, Custom Widget Preview 11:50

First Styling & Layouting Steps Preview 08:01

Enums & Multiple Constructors Preview 04:06

Official Docs & The Widget Catalog Preview 02:39

Styling Buttons & Passing Callback Functions Around Preview 01:05

Passing Callback Functions Around Preview 10:38

Introducing Maps Preview 05:52

Mapping Lists to Widgets Preview 10:24

final vs const Preview 10:50

Advanced Flutter & Dart Basics

"Advanced Basics"? Yeah... kind of. Time to check whether you're still on board!

Introducing "if" Statements Preview 06:51

[DART DEEP DIVE] More on "if" Statements Preview 11:15

[DART DEEP DIVE] The "null" Value & Null Safety Preview 12:29

Outputting Widgets Conditionally Preview 02:20

Splitting the App Into Widgets Preview 10:37

Calculating a Total Score Preview 09:03

Getters & "else-if" Preview 06:34

Resetting the Quiz Preview 05:17

"Old" Button Widgets vs "New" Button Widgets Preview 14:11

Time to Practice: Flutter Basics

It's now time to practice your basic Flutter skills.

Wrap Up Preview 01:53

Module Resources Preview 00:09

Module Introduction Preview 02:00

Running the App on a Real Android Device Preview 03:56

Running the App on an iOS Emulator Preview 05:54

Running the App on a Real iOS Device Preview 01:52

Working with the Emulators / Using the Emulators Preview 02:25

Understanding Error Messages & Fixing Errors Preview 05:27

Using the Debugger Preview 06:21

Getting Started with the Dart DevTools Preview 04:54

Understanding the Repaint Rainbow Preview 03:23

Wrapping up the Dart DevTools Preview 01:34

Useful Resources & Links Preview 00:08

Module Introduction Preview 03:19

An Overview of the Core Flutter Widgets Preview 09:42

Planning the App Preview 02:43

Combining Widgets Preview 09:18

Understanding Column Alignment Preview 06:11

Columns & Rows

Let's practice working with Columns and Rows!

Not a Widget: Adding a Transaction Model & Transaction Data Preview 08:28

Mapping Data Into Widgets Preview 03:39

Building a Custom List Item Preview 05:26

Styling a Container Preview 05:12

Styling Text Preview 02:46

More Styling! Preview 01:55

Styling Time!

Containers vs Columns vs Rows Preview 03:38

Using String Interpolation Preview 05:21

Installing External Packages & Formatting Dates Preview 07:29

DateFormat Patterns Preview 00:33

Adding Text Input Widgets (TextField) Preview 09:41

Fetching User Input Preview 09:29

Splitting the App Into Widgets Preview 12:44

Connecting Widgets & Managing Data / State Preview 06:33

Adding User Transactions to the List Preview 03:58

Making the List Scrollable! Preview 06:11

Working with ListViews Preview 12:02

Lists, Scrolling & Text Input

Further Input & Output Styling and Configuration Preview 08:28

Adding AppBar Buttons & Floating Action Buttons Preview 04:32

Showing a Modal Bottom Sheet Preview 09:32

Improving & Styling the Modal Bottom Sheet Preview 06:30

Configuring & Using Themes Preview 08:42

Custom Fonts & Working with Text Themes Preview 11:07

Updated Text Theme Properties Preview 00:14


Adding Images to the App Preview 07:57

Planning the Chart Widget Preview 04:22

Looping Through Lists Preview 13:47

More on "for" Loops Preview 00:28

Deriving Recent Transactions Preview 07:24

Creating Bars for our Chart Preview 10:59

Populating the Chart with Values Preview 06:19

Finishing the Chart Bars Preview 05:25

Flexible & Expanded: Deep Dive Preview 10:23

Adding a ListTile Widget Preview 05:29

Improving the Overall Chart Preview 03:08

Widgets & Configuring Widgets - Summary / Overview Preview 05:07

Getting Started with Date Selection Preview 05:19

Showing a DatePicker Preview 11:13

Adding Transactions with a Date Preview 03:07

Deleting Transactions & Using IconButtons Preview 07:02

Final Polishing! Preview 05:34

Wrap Up Preview 03:54

Useful Resources & Links Preview 00:11

Module Introduction Preview 01:37

What does "Responsive" and "Adaptive" Mean? Preview 05:55

Examples: Where we could improve the App! Preview 03:04

Calculating Sizes Dynamically Preview 09:13

Working with the "textScaleFactor" Preview 00:38

Using the LayoutBuilder Widget Preview 07:44


Controlling the Device Orientation Preview 04:19

Rendering Alternative Landscape Content - 1 Preview 04:42

Finishing Landscape Mode Preview 02:58

Showing Different Content Based on Device Orientation Preview 05:33

Respecting the Softkeyboard Insets Preview 03:43

Using the Device Size in Conditions Preview 04:10

Managing the MediaQuery Object Preview 02:06

Checking the Device Platform Preview 05:36

Using Cupertino (iOS) Widgets Preview 09:05

Using the SafeArea Preview 01:43

More Cupertino Styles Preview 03:09

Using Cupertino Buttons Preview 03:11

Creating Custom Adaptive Widgets Preview 05:04

Adaptive Widgets

Wrap Up Preview 01:43

Useful Resources & Links Preview 00:09

Module Introduction Preview 02:32

The Problem At Hand Preview 03:13

Widget Tree & Element Tree - What, Why and How? Preview 10:45

How Flutter Rebuilds & Repaints the Screen Preview 08:48

How Flutter Executes build() Preview 09:18

Using "const" Widgets & Constructors Preview 11:16

Widgets, Elements, build()

Writing Good Code Preview 03:57

Extracting Widgets Preview 06:07

Using Builder Methods Preview 10:21

Time to Practice: Builder Methods

Time to build your own builder methods - how meta!

Understanding the Widget Lifecycle Preview 12:55

Calling super.initState() etc. Preview 00:48

Understanding the App Lifecycle Preview 09:25

Understanding Context Preview 06:46

A Problem with Lists & Stateful Widgets Preview 05:34

Understanding the Problem Root Preview 05:09

Using Keys Preview 11:15

Keys, Lists, Stateful Widgets

Wrap Up Preview 01:41

Useful Resources & Links Preview 00:13

Module Introduction Preview 02:23

Planning the App Preview 04:45

Starting With The App - Adding Base Data Preview 11:18

Creating a Grid & Working with Linear Gradients Preview 07:49

Registering a Screen as the Main Screen Preview 03:10

Styling & Theming Preview 07:04

Navigating to a New Page Preview 10:10

Passing Data via the Constructor Preview 02:38

Using Named Routes & Passing Data With Named Routes Preview 06:42

Screens & Navigation

With the basics about screens and navigation out of the way, it's time to test your knowledge!

Diving Deeper into Named Routes Preview 02:46

Adding a Meal Model & Data Preview 12:44

Selecting Meals for a Chosen Category Preview 04:56

Displaying Recipe Items & Using Network Images Preview 14:59

Finishing the Meal List Item Preview 15:21

Navigating to the Meal Detail Page Preview 07:17

onGenerateRoute & onUnknownRoute Preview 05:27

More Navigation!

You learned more about navigation, time to test it!

Finishing the Meal Detail Page Preview 17:34

Adding a TabBar to the Appbar Preview 10:26

Adding a Bottom TabBar Preview 13:12

Adding a Custom Drawer Preview 12:37

Adding Links to the Drawer Preview 04:03

Tabs & Drawers!

Time to practice tabs and drawers!

Replacing Pages (Instead of Pushing) Preview 04:21

Popping Pages & Passing Data Back Preview 17:06

Replacing, Popping & Data

Adding Filter Switches Preview 08:31

Adding Filtering Logic Preview 16:19

Adding a "Mark as Favorite" Feature Preview 19:57

A Problem! Preview 02:40

Wrap Up Preview 02:55

Useful Resources & Links Preview 00:08

Module Introduction Preview 02:13

Planning the App Preview 06:55

Defining a Data Model Preview 06:32

Working on the "Products" Grid & Item Widgets Preview 16:24

Styling & Theming the App Preview 05:14

Adding Navigation to the App Preview 10:30

Why State Management? And what is "State" and "State Management"? Preview 06:29

Understanding the "Provider" Package & Approach Preview 02:55

Working with Providers & Listeners Preview 21:09

[DART DEEP DIVE] Inheritance ("extends") vs Mixins ("with") Preview 06:23

Providing non-Objects Preview 00:52

Listening in Different Places & Ways Preview 05:58

State, State Management & The Provider Package/ Approach

Time to check your knowledge on State Management and the "Provider Approach".

Using Nested Models & Providers Preview 14:03

Exploring Alternative Provider Syntaxes Preview 06:55

Using "Consumer" instead of "Provider.of" Preview 07:25

Local State vs App-wide State Preview 15:40

Adding Shopping Cart Data Preview 08:39

More on State Management & The Provider Package

Working with Multiple Providers Preview 03:41

Connecting the Cart Provider Preview 11:31

Working on the Shopping Cart & Displaying a Total Preview 11:37

Displaying a List of Cart Items Preview 11:17

Making Cart Items Dismissible Preview 08:47

Adding Product Detail Data Preview 04:49

Providing an Orders Object Preview 07:44

Adding Orders Preview 02:47

Adding an Orders Screen Preview 08:11

Using a Side Drawer Preview 05:45

Making Orders Expandable & Stateful Widgets vs Providers Preview 10:29

Wrap Up Preview 03:29

Useful Resources & Links Preview 00:08

Module Introduction Preview 03:02

Snackbars & Undoing "Add to Cart" Actions Preview 10:30

Using ScaffoldMessenger for Snackbars Preview 00:07

Showing Alert Dialogs Preview 07:12

Adding a "Manage Products" Page Preview 14:15

"Edit Product" Screen & A Problem Preview 05:06

Using Forms & Working with Form Inputs Preview 07:59

ListView or Column Preview 00:49

Managing Form Input Focus Preview 04:35

Multiline Inputs & Disposing Objects Preview 04:11

Adding an Image Preview Preview 00:39

Image Input & Image Preview Preview 13:15

Submitting Forms Preview 12:01

Validating User Input Preview 04:14

Adding Validation to All Inputs Preview 09:50

[OPTIONAL] Working with Regular Expressions Preview 01:08

Saving New Products Preview 03:52

Time to Update Products! Preview 16:19

Allowing Users to Delete Products Preview 03:39

Wrap Up Preview 00:53

Useful Resources & Links Preview 00:07

Module Introduction Preview 02:05

On-Device vs Web Storage Preview 04:08

How to Connect Flutter to a Database Preview 03:36

Preparing Our Backend Preview 04:31

How To Send Http Requests Preview 05:56

Using the Http Package Preview 00:30

Sending POST Requests Preview 10:55

Working with Futures in Dart Preview 07:35

[DART DEEP DIVE] Futures & Async Code Preview 09:27

Http Requests & Futures

Showing a Loading Indicator Preview 06:59

Handling Errors Gracefully Preview 12:11

Working with "async" & "await" Preview 09:52

Fetching Data, initState & "of(context)" Preview 08:27

How to Transform Fetched Data Preview 07:38

Implementing Pull-to-Refresh Preview 04:56

Updating Data via PATCH Requests Preview 06:35

Utilizing Optimistic Updating Preview 08:07

Creating Custom Exceptions & More Error Handling Preview 09:05

A Challenge For You! Preview 01:48

Updating the "Favorite" Status Optimistically Preview 06:38

Storing Orders in the Web Preview 11:29

Fetching Orders & Fixing an Issue Preview 12:21

Using the "FutureBuilder" Widget & Improving the Code Preview 13:47

Wrap Up Preview 01:54

Useful Resources & Links Preview 00:08

Module Introduction Preview 01:44

How Authentication Works Preview 05:46

Prepare Backend Preview 03:39

Adding the Auth Screen Preview 15:49

Signup Requests & URLs Preview 00:28

Adding User Signup Preview 13:33

Allowing Users to Log In Preview 06:03

Handling Authentication Errors Preview 13:10

Managing the Auth Token Locally (in the App) Preview 11:07

Using the "ProxyProvider" and Attaching the Token to Outgoing Http Requests Preview 09:49

Adding the Token to All Requests Preview 08:31

Connecting the "Favorite" Status to Users Preview 10:17

Attaching Products to Users & Filtering By Creator Preview 13:25

Attaching Orders to Users Preview 02:55

Adding a Logout Functionality Preview 04:18

Automatically Logging Users Out (After Some Time) Preview 05:26

Automatically Logging Users In Preview 18:19

Wrap Up Preview 01:36

Useful Resources & Links Preview 00:10

Module Introduction Preview 01:26

Animations From Scratch (Completely Manually Controlled) Preview 14:03

Using the "AnimatedBuilder" Widget Preview 03:51

Working with the "AnimatedContainer" Preview 02:47

More Built-in Animation & Transition Widgets Preview 09:12

Fading Loaded Images In (And Showing a Placeholder) Preview 03:35

Adding a "Hero" Transition Preview 02:35

Working with Slivers Preview 05:55

Practice: Animating Order Boxes Preview 04:00

A Fix for the Latest Version of Flutter Preview 00:17

Implementing Custom Route Transitions Preview 09:50

Wrap Up Preview 00:53

Useful Resources & Links Preview 00:07

Module Introduction Preview 01:35

Planning the App Preview 03:23

PlaceList & Place Provider Setup Preview 12:44

Adding the "Add Place" Screen & An Image Input Preview 17:16

Using Image Picker & The Device Camera Preview 12:11

Storing the Image on the Filesystem (on the Device) Preview 10:15

Managing Data & Images via the Provider Package Preview 15:32

Handling Errors Preview 01:23

Testing on Real Devices Preview 04:37

Preparing SQLite Preview 12:33

Storing & Fetching Data with SQLite Preview 11:48

Adding a Location Input & The "location" Package Preview 09:44

Fetching the User Coordinates Preview 02:29

Displaying a Static Map Snapshot Preview 08:31

Rendering a Dynamic Map (via Google Maps) Preview 13:55

Allowing Users to Pick a Location on the Map Preview 09:43

Storing the Location in SQLite Preview 18:09

Adding a "Place Detail" Screen & Opening the Map in "readonly" Mode Preview 11:33

Wrap Up Preview 01:48

Useful Resources & Links Preview 00:10

Module Introduction Preview 01:51

What is Firebase? Preview 04:12

Creating a New App Preview 04:37

Getting Started with Firebase Preview 10:56

Important: Flutter Firebase Versions Preview 00:26

Getting Started with Flutter & the Firebase SDK Preview 16:22

Adding "GoogleServices-Info.plist" correctly to iOS Preview 00:18

Rendering Stream Data with StreamBuilder Preview 06:26

Adding Data Preview 02:39

A Basic Authentication Screen Preview 10:25

Adding an App Theme Preview 03:39

Creating an Authentication Form Preview 14:02

Connecting Auth Form & Auth Screen Preview 04:58

Adding the firebase_auth Package Preview 00:05

Implementing Authentication Preview 13:15

Storing Extra User Data Preview 06:57

Finishing Authentication & Logout Preview 07:33

Adding Firebase Security Rules Preview 09:44

Listening to Chat Messages Preview 05:11

Sending & Ordering Chat Messages Preview 11:56

Creating a Basic Chat Bubble Widget Preview 06:04

Improving the Chat Bubbles Preview 12:29

Testing on Multiple Devices Preview 04:23

Displaying User Names Preview 11:36

ImagePicker: Latest Version Preview 00:25

Adding an Image Picker Preview 13:54

Preparing File Upload & Validating Images Preview 07:11

Uploading Images Preview 10:55

Improving Image Upload Preview 05:13

Running on a Real iOS Device Preview 02:14

Displaying User Images Preview 11:08

How Push Notifications Work Preview 05:41

Adding the firebase_messaging Package Preview 00:07

An Introduction to Firebase Cloud Messaging Preview 04:26

Android & Push Notifications Preview 09:44

iOS & Push Notifications Preview 13:41

Handling Push Notifications Preview 10:04

Getting Started with Firebase Cloud Functions Preview 06:24

MUST READ: Firebase Cloud Functions & Billing Preview 00:56

Setting a Firestore Trigger Preview 08:50

Sending Automated Push Notifications Preview 08:46

Polishing & Wrap Up Preview 07:15

Updating to the latest Firebase Package Versions Preview 02:18

Module Resources Preview 00:03

Module Introduction Preview 01:30

Using a Proper Project Setup Preview 00:16

Sending a Method Call from Flutter Preview 08:33

Running Android Code Preview 15:01

Running iOS Code Preview 10:25

Wrap Up Preview 00:58

Useful Resources & Links Preview 00:08

Module Introduction Preview 01:42

Preparing the Code Preview 02:24

Preparing the App Configuration Preview 05:54

Preparing Third-Party Services Preview 01:18

Adding Icons & Splash Screens Preview 09:07

Publishing Android Apps Preview 08:46

Publishing iOS Apps Preview 06:11

Useful Resources & Links Preview 00:02

You did it! Preview 01:11

Your Next Steps (To Become an Awesome Developer!) Preview 03:31

How to Plan & Develop Successful Apps Preview 10:57

Flutter 2 - What's New? What's The Impact On This Course? Preview 10:01

"Old" vs "New" Button Widgets Preview 12:52