Autoplay
Autocomplete
Previous Lesson
Complete and Continue
[LEGACY] Learn Flutter & Dart to Build iOS & Android Apps
Introduction
Introduction (1:40)
What is Flutter? (5:54)
Understanding the Flutter Architecture (4:47)
How Flutter & Dart Code Gets Compiled To Native Apps (3:12)
Join our Online Learning Community
Understanding Flutter Versions (2:49)
Flutter macOS Setup (25:07)
macOS Development Environment (19:14)
Flutter Windows Setup (21:51)
Windows Development Environment (17:57)
Flutter & Material Design (1:15)
Flutter Alternatives (6:06)
Course Outline (6:40)
How To Get The Most Out Of The Course (2:40)
Useful Resources & Links
The Academind Pro Referral Program
Flutter Basics [QUIZ APP]
Module Introduction (2:25)
Creating a New Project (6:31)
An Overview of the Generated Files & Folders (8:10)
Analyzing the Default App (5:32)
Dart Basics (17:17)
More Dart Basics (13:06)
Quiz 1: Dart Fundamentals
Building an App From Scratch (11:02)
Running the App on an Emulator (3:25)
Class Constructors & Named Arguments (8:36)
First Summary & Additional Syntax (8:10)
Quiz 2: Flutter App Basics
Building a Widget Tree (7:40)
Visible (Input / Output) & Invisible (Layout / Control) Widgets (3:13)
Adding Layout Widgets (8:47)
Quiz 3: Widget Basics
Connecting Functions & Buttons (7:30)
Anonymous Functions (3:20)
Updating Widget Data (Or: Using StatelessWidget Incorrectly) (6:36)
[DART DEEP DIVE] Understanding Lists
Updating Correctly with Stateful Widgets (11:58)
A Brief Look Under The Hood (2:27)
Quiz 4: Stateful & Stateless Widgets
Using Private Properties (5:16)
Creating a New, Custom Widget (11:50)
First Styling & Layouting Steps (8:01)
Enums & Multiple Constructors (4:06)
Official Docs & The Widget Catalog (2:39)
Passing Callback Functions Around (12:44)
Introducing Maps (5:52)
Mapping Lists to Widgets (10:24)
final vs const (10:50)
Quiz 5: Advanced Flutter & Dart Basics
Introducing "if" Statements (6:51)
[DART DEEP DIVE] More on "if" Statements (11:15)
[DART DEEP DIVE] The "null" Value (12:30)
Outputting Widgets Conditionally (2:20)
Splitting the App Into Widgets (10:37)
Calculating a Total Score (9:03)
Getters & "else-if" (6:34)
Resetting the Quiz (5:17)
"New" Flutter Buttons vs "Old" Buttons (14:11)
Assignment - Basics (Problem) (1:55)
Assignment - Basics (Solution) (12:45)
Wrap Up (1:53)
Useful Resources & Links
Running Apps on Different Devices & Debugging Apps
Module Introduction (2:00)
Running the App on a Real Android Device (3:56)
Running the App on an iOS Emulator (5:54)
Running the App on a Real iOS Device (1:52)
Working with the Emulators / Using the Emulators (2:25)
Understanding Error Messages & Fixing Errors (5:27)
Using the Debugger (6:21)
Getting Started with the Dart DevTools (4:54)
Understanding the Repaint Rainbow (3:23)
Wrapping up the Dart DevTools (1:34)
Useful Resources & Links
Widgets, Styling, Adding Logic - Building a Real App [PERSONAL EXPENSES APP]
Module Introduction (3:19)
An Overview of the Core Flutter Widgets (9:42)
Planning the App (2:43)
Combining Widgets (9:18)
Understanding Column Alignment (6:11)
Quiz 6: Columns & Rows
Not a Widget: Adding a Transaction Model & Transaction Data (8:28)
Mapping Data Into Widgets (3:39)
Building a Custom List Item (5:26)
Styling a Container (5:12)
Styling Text (2:46)
More Styling! (1:55)
Quiz 7: Styling Time!
Containers vs Columns vs Rows (3:38)
Using String Interpolation (5:21)
Installing External Packages & Formatting Dates (7:29)
Adding Text Input Widgets (TextField) (9:41)
Fetching User Input (9:29)
Splitting the App Into Widgets (12:44)
Connecting Widgets & Managing Data / State (6:33)
Adding User Transactions to the List (3:58)
Making the List Scrollable! (6:11)
Working with ListViews (12:02)
Quiz 8: Lists, Scrolling & Text Input
Further Input & Output Styling and Configuration (8:28)
Adding AppBar Buttons & Floating Action Buttons (4:32)
Showing a Modal Bottom Sheet (9:32)
Improving & Styling the Modal Bottom Sheet (6:30)
Configuring & Using Themes (8:41)
Custom Fonts & Working with Text Themes (11:07)
Quiz 9: Theming
Adding Images to the App (7:57)
Planning the Chart Widget (4:22)
Looping Through Lists (13:47)
Deriving Recent Transactions (7:24)
Creating Bars for our Chart (10:59)
Populating the Chart with Values (7:25)
Finishing the Chart Bars (5:25)
Flexible & Expanded: Deep Dive (10:23)
Adding a ListTile Widget (5:29)
Improving the Overall Chart (3:08)
Widgets & Configuring Widgets - Summary / Overview (5:07)
Getting Started with Date Selection (5:19)
Showing a DatePicker (11:13)
Adding Transactions with a Date (3:07)
Deleting Transactions & Using IconButtons (7:02)
Final Polishing! (5:34)
Wrap Up (3:54)
Useful Resources & Links
Responsive & Adaptive User Interfaces and Apps
Module Introduction (1:37)
What does "Responsive" and "Adaptive" Mean? (5:55)
Examples: Where we could improve the App! (3:04)
Calculating Sizes Dynamically (9:13)
Using the LayoutBuilder Widget (7:43)
Quiz 10: Responsiveness
Controlling the Device Orientation (4:19)
Rendering Alternative Landscape Content (4:42)
Finishing Landscape Mode (2:58)
Showing Different Content Based on Device Orientation (5:33)
Respecting the Softkeyboard Insets (3:43)
Using the Device Size in Conditions (4:10)
Managing the MediaQuery Object (2:06)
Checking the Device Platform (5:36)
Using Cupertino (iOS) Widgets (9:05)
Using the SafeArea (1:43)
More Cupertino Styles (3:09)
Using Cupertino Buttons (3:11)
Creating Custom Adaptive Widgets (5:04)
Quiz 11: Adaptive Widgets
Wrap Up (1:43)
Useful Resources & Links
Widget & Flutter Internals - Deep Dive
Module Introduction (2:32)
The Problem At Hand (3:13)
Widget Tree & Element Tree - What, Why and How? (10:45)
How Flutter Rebuilds & Repaints the Screen (8:48)
How Flutter Executes build() (9:18)
Using "const" Widgets & Constructors (11:16)
Quiz 12: Widgets, Elements, build()
Writing Good Code (3:57)
Extracting Widgets (6:07)
Using Builder Methods (10:21)
Assignment - Builder Methods (Problem) (0:32)
Assignment - Builder Methods (Solution) (1:46)
Understanding the Widget Lifecycle (12:55)
Understanding the App Lifecycle (9:25)
Understanding Context (6:46)
A Problem with Lists & Stateful Widgets (5:34)
Understanding the Problem Root (5:09)
Using Keys (11:15)
Quiz 13: Keys, Lists, Stateful Widgets
Wrap Up (1:41)
Useful Resources & Links
Navigation & Multiple Screens [MEALS APP]
Module Introduction (2:23)
Planning the App (4:45)
Starting With The App - Adding Base Data (11:18)
Creating a Grid & Working with Linear Gradients (7:49)
Registering a Screen as the Main Screen (3:10)
Styling & Theming (7:04)
Navigating to a New Page (10:10)
Passing Data via the Constructor (2:38)
Using Named Routes & Passing Data With Named Routes (6:42)
Quiz 14: Screens & Navigation
Diving Deeper into Named Routes (2:46)
Adding a Meal Model & Data (12:44)
Selecting Meals for a Chosen Category (4:56)
Displaying Recipe Items & Using Network Images (14:59)
Finishing the Meal List Item (15:21)
Navigating to the Meal Detail Page (7:17)
onGenerateRoute & onUnknownRoute (5:27)
Quiz 15: More Navigation!
Finishing the Meal Detail Page (17:34)
Adding a TabBar to the Appbar (10:26)
Adding a Bottom TabBar (13:12)
Adding a Custom Drawer (12:37)
Adding Links to the Drawer (4:03)
Quiz 16: Tabs & Drawers!
Replacing Pages (Instead of Pushing) (4:21)
Popping Pages & Passing Data Back (17:06)
Quiz 17: Replacing, Popping & Data
Adding Filter Switches (8:31)
Adding Filtering Logic (16:19)
Adding a "Mark as Favorite" Feature (19:57)
A Problem! (2:40)
Wrap Up (2:55)
Useful Resources & Links
State Management [SHOP APP]
Module Introduction (2:13)
Planning the App (6:55)
Defining a Data Model (6:32)
Working on the "Products" Grid & Item Widgets (16:24)
Styling & Theming the App (5:14)
Adding Navigation to the App (10:30)
Why State Management? And what is "State" and "State Management"? (6:29)
Understanding the "Provider" Package & Approach (2:55)
Working with Providers & Listeners (21:09)
[DART DEEP DIVE] Inheritance ("extends") vs Mixins ("with") (6:23)
Providing non-Objects
Listening in Different Places & Ways (5:58)
Quiz 18: State, State Management & The Provider Package/ Approach
Using Nested Models & Providers (13:03)
Exploring Alternative Provider Syntaxes (6:55)
Using "Consumer" instead of "Provider.of" (7:25)
Local State vs App-wide State (15:40)
Adding Shopping Cart Data (8:39)
Quiz 19: More on State Management & The Provider Package
Working with Multiple Providers (3:41)
Connecting the Cart Provider (11:31)
Working on the Shopping Cart & Displaying a Total (11:37)
Displaying a List of Cart Items (11:17)
Making Cart Items Dismissible (8:47)
Adding Product Detail Data (4:49)
Providing an Orders Object (7:44)
Adding Orders (2:47)
Adding an Orders Screen (8:11)
Using a Side Drawer (5:45)
Making Orders Expandable & Stateful Widgets vs Providers (10:29)
Wrap Up (3:29)
Useful Resources & Links
Working with User Input & Forms [SHOP APP]
Module Introduction (3:02)
Snackbars & Undoing "Add to Cart" Actions (10:30)
Using ScaffoldMessenger for SnackBars
Showing Alert Dialogs (7:12)
Adding a "Manage Products" Page (14:15)
"Edit Product" Screen & A Problem (5:06)
Using Forms & Working with Form Inputs (7:59)
Managing Form Input Focus (4:35)
Multiline Inputs & Disposing Objects (4:11)
Image Input & Image Preview (13:15)
Submitting Forms (12:01)
Validating User Input (4:14)
Adding Validation to All Inputs (9:50)
[OPTIONAL] Working with Regular Expressions
Saving New Products (3:52)
Time to Update Products! (16:19)
Allowing Users to Delete Products (3:39)
Wrap Up (0:53)
Useful Resources & Links
Sending Http Requests [SHOP APP]
Module Introduction (2:05)
On-Device vs Web Storage (4:08)
How to Connect Flutter to a Database (3:35)
Preparing Our Backend (4:31)
How To Send Http Requests (5:56)
Sending POST Requests (10:55)
Working with Futures in Dart (7:35)
[DART DEEP DIVE] Futures & Async Code (9:27)
Quiz 20: Http Requests & Futures
Showing a Loading Indicator (6:59)
Handling Errors Gracefully (12:11)
Working with "async" & "await" (9:52)
Fetching Data, initState & "of(context)" (8:27)
How to Transform Fetched Data (7:38)
Implementing Pull-to-Refresh (4:56)
Updating Data via PATCH Requests (6:35)
Utilizing Optimistic Updating (8:07)
Creating Custom Exceptions & More Error Handling (9:05)
A Challenge For You! (1:48)
Updating the "Favorite" Status Optimistically (6:38)
Storing Orders in the Web (11:29)
Fetching Orders & Fixing an Issue (12:21)
Using the "FutureBuilder" Widget & Improving the Code (13:47)
Wrap Up (1:54)
Useful Resources & Links
Adding User Authentication [SHOP APP]
Module Introduction (1:44)
How Authentication Works (5:46)
Prepare Backend (3:39)
Adding the Auth Screen (15:49)
Adding User Signup (13:33)
Allowing Users to Log In (6:03)
Handling Authentication Errors (13:10)
Managing the Auth Token Locally (in the App) (11:07)
Using the "ProxyProvider" and Attaching the Token to Outgoing Http Requests (9:49)
Adding the Token to All Requests (8:31)
Connecting the "Favorite" Status to Users (10:17)
Attaching Products to Users & Filtering By Creator (13:25)
Attaching Orders to Users (2:55)
Adding a Logout Functionality (4:18)
Automatically Logging Users Out (After Some Time) (5:26)
Automatically Logging Users In (18:19)
Wrap Up (1:36)
Useful Resources & Links
Adding Animations [SHOP APP]
Module Introduction (1:26)
Animations From Scratch (Completely Manually Controlled) (14:03)
Using the "AnimatedBuilder" Widget (3:51)
Working with the "AnimatedContainer" (2:47)
More Built-in Animation & Transition Widgets (9:12)
Fading Loaded Images In (And Showing a Placeholder) (3:35)
Adding a "Hero" Transition (2:35)
Working with Slivers (5:55)
Practice: Animating Order Boxes (4:00)
Implementing Custom Route Transitions (9:50)
Wrap Up (0:53)
Useful Resources & Links
Using Native Device Features (Camera, Maps, Location, ...) [GREAT PLACES APP]
Module Introduction (1:35)
Planning the App (3:23)
PlaceList & Place Provider Setup (12:44)
Adding the "Add Place" Screen & An Image Input (17:16)
Using Image Picker & The Device Camera (12:11)
Storing the Image on the Filesystem (on the Device) (10:15)
Managing Data & Images via the Provider Package (15:32)
Handling Errors (1:23)
Testing on Real Devices (4:37)
Preparing SQLite (12:33)
Storing & Fetching Data with SQLite (11:48)
Adding a Location Input & The "location" Package (9:44)
Fetching the User Coordinates (2:29)
Displaying a Static Map Snapshot (8:31)
Rendering a Dynamic Map (via Google Maps) (13:55)
Allowing Users to Pick a Location on the Map (9:43)
Storing the Location in SQLite (18:09)
Adding a "Place Detail" Screen & Opening the Map in "readonly" Mode (11:33)
Wrap Up (1:48)
Useful Resources & Links
Firebase, Image Upload & Push Notifications
Module Introduction (1:51)
What is Firebase? (4:12)
Getting Started with Firebase (10:56)
Important: Flutter & Firebase Version
Creating a New App (4:37)
Getting Started with Firestore & the Flutter SDK (16:22)
Rendering Stream Data with StreamBuilder (6:26)
Adding Data (2:39)
Adding a Basic Authentication Screen (10:25)
Adding an App Theme (3:39)
Creating an Authentication Form (14:02)
Connecting Auth Form & Auth Screen (4:58)
Implementing Authentication (13:15)
Storing Extra User Data (6:57)
Finishing Authentication & Adding Logout (7:33)
Adding Firebase Security Rules (9:44)
Listening to Chat Messages (5:11)
Sending & Ordering Chat Messages (11:56)
Creating a Base Chat Bubble Widget (6:04)
Improving the Chat Bubbles (12:29)
Testing on Multiple Devices (4:23)
Displaying Usernames (11:36)
Adding an Image Picker (13:54)
Preparing the File Upload & Image Validation (7:11)
Uploading Images (10:55)
Improving Image Upload (5:13)
Running on a Real iOS Device (2:14)
Displaying User Images (11:08)
How Push Notifications Work (5:41)
An Introduction To Firebase Cloud Messaging (4:26)
Android & Push Notifications (9:44)
iOS & Push Notifications (13:41)
Handling Push Notifications (10:04)
Getting Started with Cloud Functions (6:24)
Setting a Firestore Trigger (8:50)
Sending Automated Push Notifications (8:46)
Polishing & Wrap Up (7:15)
Updating to the Latest Firebase Package Versions
Module Resources
Running Native Swift, ObjectiveC, Java or Kotlin Code
Module Introduction (1:30)
Sending a Method Call from Flutter (8:33)
Running Android Code (15:01)
Running iOS Code (10:25)
Wrap Up (0:58)
Useful Resources & Links
Publishing to the App Stores
Module Introduction (1:42)
Preparing the Code (2:24)
Preparing the App Configuration (5:54)
Preparing Third-Party Services (1:18)
Adding Icons & Splash Screens (9:07)
Publishing Android Apps (8:46)
Publishing iOS Apps (6:11)
Useful Resources & Links
Roundup & Next Steps
You did it! (1:11)
Your Next Steps (To Become an Awesome Developer!) (3:31)
How to Plan & Develop Successful Apps (10:57)
Flutter 2 Update
Flutter 2 - What's New? What's The Impact On This Course? (10:01)
"Old" vs "New" Button Widgets (12:52)
"Old" vs "New" Button Widgets
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock