Flutter & Dart - The Complete Guide [2023 Edition]
A Complete Guide to the Flutter SDK & Flutter Framework for building native iOS and Android apps
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 moreBooks
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 your
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