Flutter & Dart - The Complete Guide [2023 Edition]

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

  • Maximilian Schwarzmüller
  • 4.6
  • (54900 reviews)
  • 42 hrs
  • 379 lectures
  • Udemy
Flutter & Dart - The Complete Guide [2023 Edition]

What you will learn?

  • 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!
  • 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

Your trainer

Maximilian Schwarzmüller

Starting out at the age of 13 I never stopped learning new programming skills and languages. Early I started creating websites for friends and just for fun as well. Besides web development I also explored Python and other non-web-only languages. This passion has since lasted and lead to my decision of working as a freelance web developer and consultant. The success and fun I have in this job is immense and really keeps that passion burningly alive.

Starting web development on the backend (PHP with Laravel, NodeJS, Python) I also became more and more of a frontend developer using modern frameworks like React, Angular or VueJS 2 in a lot of projects. I love both worlds nowadays!

379 lessons

Easy to follow lectures and videos covering subject details.

42 hours

This course includes hours of video material. Watch on-demand, anytime, anywhere.

Certificate of Completion

You will earn a Certificate of Completion at the end of this course.

Course curriculum

  • Introduction01:48
  • What is Flutter?05:54
  • Join our Online Learning Community00:25
  • Understanding the Flutter Architecture04:47
  • How Flutter & Dart Code Gets Compiled To Native Apps03:12
  • Understanding Flutter Versions02:49
  • Flutter macOS Setup25:07
  • macOS Development Environment19:14
  • Flutter Windows Setup21:51
  • Windows Development Environment17:57
  • Flutter & Material Design01:15
  • Flutter Alternatives06:06
  • Course Outline06:40
  • How To Get The Most Out Of The Course02:40
  • Useful Resources & Links00:06
  • Module Introduction02:25
  • Creating a New Project06:31
  • An Overview of the Generated Files & Folders08:10
  • More on Git (Version Control System)00:26
  • Analyzing the Default App05:32
  • Dart Basics17:17
  • More Dart Basics13:06
  • Dart Basics - Summary04:57
  • Dart Fundamentals7 questions
  • Building an App From Scratch11:02
  • Running the App on an Emulator03:25
  • Class Constructors & Named Arguments08:37
  • First Summary & Additional Syntax08:10
  • Flutter App Basics3 questions
  • Building a Widget Tree07:40
  • Visible (Input / Output) & Invisible (Layout / Control) Widgets03:13
  • Adding Layout Widgets08:47
  • Using The "Old" Buttons00:29
  • Widget Basics6 questions
  • Connecting Functions & Buttons07:30
  • Anonymous Functions03:20
  • Updating Widget Data (Or: Using StatelessWidget Incorrectly)06:36
  • [DART DEEP DIVE] Understanding Lists01:30
  • Updating Correctly with Stateful Widgets11:58
  • Stateful & Stateless Widgets3 questions
  • A Brief Look Under The Hood02:27
  • Using Private Properties05:16
  • Creating a New, Custom Widget11:50
  • First Styling & Layouting Steps08:01
  • Enums & Multiple Constructors04:06
  • Official Docs & The Widget Catalog02:39
  • Styling Buttons00:50
  • Passing Callback Functions Around12:44
  • Introducing Maps05:52
  • Mapping Lists to Widgets10:24
  • final vs const10:50
  • Advanced Flutter & Dart Basics6 questions
  • Introducing "if" Statements06:51
  • [DART DEEP DIVE] More on "if" Statements11:15
  • [DART DEEP DIVE] The "null" Value & Null Safety12:29
  • Outputting Widgets Conditionally02:20
  • Splitting the App Into Widgets10:37
  • Calculating a Total Score09:03
  • Getters & "else-if"06:34
  • Resetting the Quiz05:17
  • "Old" Button Widgets vs "New" Button Widgets14:11
  • Time to Practice: Flutter Basics1 question
  • Wrap Up01:53
  • Module Resources00:09
  • Module Introduction02:00
  • Running the App on a Real Android Device03:56
  • Running the App on an iOS Emulator05:54
  • Running the App on a Real iOS Device01:52
  • Working with the Emulators / Using the Emulators02:25
  • Understanding Error Messages & Fixing Errors05:27
  • Using the Debugger06:21
  • Getting Started with the Dart DevTools04:54
  • Understanding the Repaint Rainbow03:23
  • Wrapping up the Dart DevTools01:34
  • Useful Resources & Links00:08
  • Module Introduction03:19
  • An Overview of the Core Flutter Widgets09:42
  • Planning the App02:43
  • Combining Widgets09:18
  • Understanding Column Alignment06:11
  • Columns & Rows3 questions
  • Not a Widget: Adding a Transaction Model & Transaction Data08:28
  • Mapping Data Into Widgets03:39
  • Building a Custom List Item05:26
  • Styling a Container05:12
  • Styling Text02:46
  • More Styling!01:55
  • Styling Time!3 questions
  • Containers vs Columns vs Rows03:38
  • Using String Interpolation05:21
  • Installing External Packages & Formatting Dates07:29
  • DateFormat Patterns00:33
  • Adding Text Input Widgets (TextField)09:41
  • Fetching User Input09:29
  • Splitting the App Into Widgets12:44
  • Connecting Widgets & Managing Data / State06:33
  • Adding User Transactions to the List03:58
  • Making the List Scrollable!06:11
  • Working with ListViews12:02
  • Lists, Scrolling & Text Input3 questions
  • Further Input & Output Styling and Configuration08:28
  • Adding AppBar Buttons & Floating Action Buttons04:32
  • Showing a Modal Bottom Sheet09:32
  • Improving & Styling the Modal Bottom Sheet06:30
  • Configuring & Using Themes08:42
  • Custom Fonts & Working with Text Themes11:07
  • Updated Text Theme Properties00:21
  • Theming3 questions
  • Adding Images to the App07:57
  • Planning the Chart Widget04:22
  • Looping Through Lists13:47
  • More on "for" Loops00:28
  • Deriving Recent Transactions07:24
  • Creating Bars for our Chart10:59
  • Populating the Chart with Values07:24
  • Finishing the Chart Bars05:25
  • Flexible & Expanded: Deep Dive10:23
  • Adding a ListTile Widget05:29
  • Improving the Overall Chart03:08
  • Widgets & Configuring Widgets - Summary / Overview05:07
  • Getting Started with Date Selection05:19
  • Showing a DatePicker11:13
  • Adding Transactions with a Date03:07
  • Deleting Transactions & Using IconButtons07:02
  • Final Polishing!05:34
  • Wrap Up03:54
  • Useful Resources & Links00:11
  • Module Introduction01:37
  • What does "Responsive" and "Adaptive" Mean?05:55
  • Examples: Where we could improve the App!03:04
  • Calculating Sizes Dynamically09:13
  • Working with the "textScaleFactor"00:38
  • Using the LayoutBuilder Widget07:44
  • Responsiveness3 questions
  • Controlling the Device Orientation04:19
  • Rendering Alternative Landscape Content - 104:42
  • Finishing Landscape Mode02:58
  • Showing Different Content Based on Device Orientation05:33
  • Respecting the Softkeyboard Insets03:43
  • Using the Device Size in Conditions04:10
  • Managing the MediaQuery Object02:06
  • Checking the Device Platform05:36
  • Using Cupertino (iOS) Widgets09:05
  • Using the SafeArea01:43
  • More Cupertino Styles03:09
  • Using Cupertino Buttons03:11
  • Creating Custom Adaptive Widgets05:04
  • Adaptive Widgets3 questions
  • Wrap Up01:43
  • Useful Resources & Links00:09
  • Module Introduction02:32
  • The Problem At Hand03:13
  • Widget Tree & Element Tree - What, Why and How?10:45
  • How Flutter Rebuilds & Repaints the Screen08:48
  • How Flutter Executes build()09:18
  • Using "const" Widgets & Constructors11:16
  • Widgets, Elements, build()4 questions
  • Writing Good Code03:57
  • Extracting Widgets06:07
  • Using Builder Methods10:21
  • Time to Practice: Builder Methods1 question
  • Understanding the Widget Lifecycle12:55
  • Calling super.initState() etc.00:48
  • Understanding the App Lifecycle09:25
  • Understanding Context06:46
  • A Problem with Lists & Stateful Widgets05:34
  • Understanding the Problem Root05:09
  • Using Keys11:15
  • Keys, Lists, Stateful Widgets3 questions
  • Wrap Up01:41
  • Useful Resources & Links00:13
  • Module Introduction02:23
  • Planning the App04:45
  • Starting With The App - Adding Base Data11:18
  • Creating a Grid & Working with Linear Gradients07:49
  • Registering a Screen as the Main Screen03:10
  • Styling & Theming07:04
  • Navigating to a New Page10:10
  • Passing Data via the Constructor02:38
  • Using Named Routes & Passing Data With Named Routes06:42
  • Screens & Navigation5 questions
  • Diving Deeper into Named Routes02:46
  • Adding a Meal Model & Data12:44
  • Selecting Meals for a Chosen Category04:56
  • Displaying Recipe Items & Using Network Images14:59
  • Finishing the Meal List Item15:21
  • Navigating to the Meal Detail Page07:17
  • onGenerateRoute & onUnknownRoute05:27
  • More Navigation!2 questions
  • Finishing the Meal Detail Page17:34
  • Adding a TabBar to the Appbar10:26
  • Adding a Bottom TabBar13:12
  • Adding a Custom Drawer12:37
  • Adding Links to the Drawer04:03
  • Tabs & Drawers!2 questions
  • Replacing Pages (Instead of Pushing)04:21
  • Popping Pages & Passing Data Back17:06
  • Replacing, Popping & Data3 questions
  • Adding Filter Switches08:31
  • Adding Filtering Logic16:19
  • Adding a "Mark as Favorite" Feature19:57
  • A Problem!02:40
  • Wrap Up02:55
  • Useful Resources & Links00:08
  • Module Introduction02:13
  • Planning the App06:55
  • Defining a Data Model06:32
  • Working on the "Products" Grid & Item Widgets16:24
  • Styling & Theming the App05:14
  • Adding Navigation to the App10:30
  • Why State Management? And what is "State" and "State Management"?06:29
  • Understanding the "Provider" Package & Approach02:55
  • Working with Providers & Listeners21:09
  • [DART DEEP DIVE] Inheritance ("extends") vs Mixins ("with")06:23
  • Providing non-Objects00:52
  • Listening in Different Places & Ways05:58
  • State, State Management & The Provider Package/ Approach3 questions
  • Using Nested Models & Providers14:03
  • Exploring Alternative Provider Syntaxes06:55
  • Using "Consumer" instead of "Provider.of"07:25
  • Local State vs App-wide State15:40
  • Adding Shopping Cart Data08:39
  • More on State Management & The Provider Package3 questions
  • Working with Multiple Providers03:41
  • Connecting the Cart Provider11:31
  • Working on the Shopping Cart & Displaying a Total11:37
  • Displaying a List of Cart Items11:17
  • Making Cart Items Dismissible08:47
  • Adding Product Detail Data04:49
  • Providing an Orders Object07:44
  • Adding Orders02:47
  • Adding an Orders Screen08:11
  • Using a Side Drawer05:45
  • Making Orders Expandable & Stateful Widgets vs Providers10:29
  • Wrap Up03:29
  • Useful Resources & Links00:08
  • Module Introduction03:02
  • Snackbars & Undoing "Add to Cart" Actions10:30
  • Using ScaffoldMessenger for Snackbars00:10
  • Showing Alert Dialogs07:12
  • Adding a "Manage Products" Page14:15
  • "Edit Product" Screen & A Problem05:06
  • Using Forms & Working with Form Inputs07:59
  • ListView or Column00:49
  • Managing Form Input Focus04:35
  • Multiline Inputs & Disposing Objects04:11
  • Adding an Image Preview00:39
  • Image Input & Image Preview13:15
  • Submitting Forms12:01
  • Validating User Input04:14
  • Adding Validation to All Inputs09:50
  • [OPTIONAL] Working with Regular Expressions01:08
  • Saving New Products03:52
  • Time to Update Products!16:19
  • Allowing Users to Delete Products03:39
  • Wrap Up00:53
  • Useful Resources & Links00:07
  • Module Introduction02:05
  • On-Device vs Web Storage04:08
  • How to Connect Flutter to a Database03:36
  • Preparing Our Backend04:31
  • How To Send Http Requests05:56
  • Using the Http Package00:30
  • Sending POST Requests10:55
  • Working with Futures in Dart07:35
  • [DART DEEP DIVE] Futures & Async Code09:27
  • Http Requests & Futures5 questions
  • Showing a Loading Indicator06:59
  • Handling Errors Gracefully12:11
  • Working with "async" & "await"09:52
  • Fetching Data, initState & "of(context)"08:27
  • How to Transform Fetched Data07:38
  • Implementing Pull-to-Refresh04:56
  • Updating Data via PATCH Requests06:35
  • Utilizing Optimistic Updating08:07
  • Creating Custom Exceptions & More Error Handling09:05
  • A Challenge For You!01:48
  • Updating the "Favorite" Status Optimistically06:38
  • Storing Orders in the Web11:29
  • Fetching Orders & Fixing an Issue12:21
  • Using the "FutureBuilder" Widget & Improving the Code13:47
  • Wrap Up01:54
  • Useful Resources & Links00:08
  • Module Introduction01:44
  • How Authentication Works05:46
  • Prepare Backend03:39
  • Adding the Auth Screen15:49
  • Signup Requests & URLs00:28
  • Adding User Signup13:33
  • Allowing Users to Log In06:03
  • Handling Authentication Errors13:10
  • Managing the Auth Token Locally (in the App)11:07
  • Using the "ProxyProvider" and Attaching the Token to Outgoing Http Requests09:49
  • Adding the Token to All Requests08:31
  • Connecting the "Favorite" Status to Users10:17
  • Attaching Products to Users & Filtering By Creator13:25
  • Attaching Orders to Users02:55
  • Adding a Logout Functionality04:18
  • Automatically Logging Users Out (After Some Time)05:26
  • Automatically Logging Users In18:19
  • Wrap Up01:36
  • Useful Resources & Links00:10
  • Module Introduction01:26
  • Animations From Scratch (Completely Manually Controlled)14:03
  • Using the "AnimatedBuilder" Widget03:51
  • Working with the "AnimatedContainer"02:47
  • More Built-in Animation & Transition Widgets09:12
  • Fading Loaded Images In (And Showing a Placeholder)03:35
  • Adding a "Hero" Transition02:35
  • Working with Slivers05:55
  • Practice: Animating Order Boxes04:00
  • A Fix for the Latest Version of Flutter00:17
  • Implementing Custom Route Transitions09:50
  • Wrap Up00:53
  • Useful Resources & Links00:07
  • Module Introduction01:35
  • Planning the App03:23
  • PlaceList & Place Provider Setup12:44
  • Adding the "Add Place" Screen & An Image Input17:16
  • Using Image Picker & The Device Camera12:11
  • Storing the Image on the Filesystem (on the Device)10:15
  • Managing Data & Images via the Provider Package15:32
  • Handling Errors01:23
  • Testing on Real Devices04:37
  • Preparing SQLite12:33
  • Storing & Fetching Data with SQLite11:48
  • Adding a Location Input & The "location" Package09:44
  • Fetching the User Coordinates02:29
  • Displaying a Static Map Snapshot08:31
  • Rendering a Dynamic Map (via Google Maps)13:55
  • Allowing Users to Pick a Location on the Map09:43
  • Storing the Location in SQLite18:09
  • Adding a "Place Detail" Screen & Opening the Map in "readonly" Mode11:33
  • Wrap Up01:48
  • Useful Resources & Links00:10
  • Module Introduction01:51
  • What is Firebase?04:12
  • Creating a New App04:37
  • Getting Started with Firebase10:56
  • Important: Flutter Firebase Versions01:01
  • Getting Started with Flutter & the Firebase SDK16:22
  • Adding "GoogleServices-Info.plist" correctly to iOS00:18
  • Rendering Stream Data with StreamBuilder06:26
  • Adding Data02:39
  • A Basic Authentication Screen10:25
  • Adding an App Theme03:39
  • Creating an Authentication Form14:02
  • Connecting Auth Form & Auth Screen04:58
  • Adding the firebase_auth Package00:05
  • Implementing Authentication13:15
  • Storing Extra User Data06:57
  • Finishing Authentication & Logout07:33
  • Adding Firebase Security Rules09:44
  • Listening to Chat Messages05:11
  • Sending & Ordering Chat Messages11:56
  • Creating a Basic Chat Bubble Widget06:04
  • Improving the Chat Bubbles12:29
  • Testing on Multiple Devices04:23
  • Displaying User Names11:36
  • ImagePicker: Latest Version00:25
  • Adding an Image Picker13:54
  • Preparing File Upload & Validating Images07:11
  • Uploading Images10:55
  • Improving Image Upload05:13
  • Running on a Real iOS Device02:14
  • Displaying User Images11:08
  • How Push Notifications Work05:41
  • Adding the firebase_messaging Package00:07
  • An Introduction to Firebase Cloud Messaging04:26
  • Android & Push Notifications09:44
  • iOS & Push Notifications13:41
  • Handling Push Notifications10:04
  • Getting Started with Firebase Cloud Functions06:24
  • MUST READ: Firebase Cloud Functions & Billing00:56
  • Setting a Firestore Trigger08:50
  • Sending Automated Push Notifications08:46
  • Polishing & Wrap Up07:15
  • Updating to the latest Firebase Package Versions02:18
  • Module Resources00:03
  • Module Introduction01:30
  • Using a Proper Project Setup00:16
  • Sending a Method Call from Flutter08:33
  • Running Android Code15:01
  • Running iOS Code10:25
  • Wrap Up00:58
  • Useful Resources & Links00:08
  • Module Introduction01:42
  • Preparing the Code02:24
  • Preparing the App Configuration05:54
  • Preparing Third-Party Services01:18
  • Adding Icons & Splash Screens09:07
  • Publishing Android Apps08:46
  • Publishing iOS Apps06:11
  • Useful Resources & Links00:02
  • You did it!01:11
  • Your Next Steps (To Become an Awesome Developer!)03:31
  • How to Plan & Develop Successful Apps10:57
  • Flutter 2 - What's New? What's The Impact On This Course?10:01
  • "Old" vs "New" Button Widgets12:52
  • Course Roundup00:55
  • Bonus: More Content!00:20
Online Courses

Learning Flutter doesn't have to be hard. Here is our curated list of recommended online courses that will guide you step-by-step in the learning process.

Learn more
Books

Are you an avid book reader? Do you prefer paperback, or maybe Kindle version? Take a look at our curated list of Flutter related books and take yourskills to the next level.

Learn more
YouTube videos

The number of high-quality and free Flutter video tutorials is growing fast. Check this curated list of recommended videos - there is no excuse to stop learning.

Learn more