Flutter & Dart - The Complete Guide

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

Course Overview

About This Course

You want to build real mobile apps, but the path feels messy: different platforms, different languages, and a lot of “hello world” tutorials that never turn into something you can ship. You’re looking for a clear, reliable way to move from curiosity to confidence.

In this course, you’ll be guided step-by-step through Flutter and Dart with a practice-oriented flow that keeps you building as you go. You’ll start at zero if you need to, but you won’t get stuck at the basics—you’ll keep stacking skills until you can handle the kinds of features modern apps actually need.

By the end, you’ll be able to create engaging, high-performance apps for both iOS and Android from a single codebase. You’ll know how to put together polished screens, connect to real services, and turn your ideas into apps that feel complete—not like prototypes.

What You'll Learn

You’ll cover the full Flutter workflow: from setup and widgets to navigation, state, backend communication, and native device integrations.

  • Set up Flutter

    Install and configure Flutter for development on Windows or macOS, and understand what’s required to build for Android vs. iOS (including the macOS requirement for iOS builds).

  • Build with widgets

    Create responsive UIs by combining Flutter’s built-in widget suite and writing your own custom widgets, so you can design screens that look and feel native on both platforms.

  • Navigate between pages

    Implement page navigation patterns like tabs, side drawers, and stack-based navigation to structure multi-screen apps that users can move through naturally.

  • Manage state and forms

    Handle app state with state management solutions, and build forms that validate user input so your UI stays consistent and your data stays clean.

  • Connect to backends

    Send HTTP requests to backend servers, wire up user authentication, and use debugging tips & tricks to track down issues when real data and real users enter the picture.

  • Add native features

    Integrate Google Maps and device capabilities like the camera, then support image upload and push notifications (manual and automated) to deliver the features users expect.

Ready to get started?

See enrollment options

Prerequisites

  • Basic programming knowledge helps, but it’s not required—this course starts at zero.

  • No prior Flutter or Dart experience is needed.

  • You can develop Android apps on Windows, macOS, or Linux; building iOS apps requires macOS.

Who Is This Course For?

  • Complete beginners

    You’ve never built an iOS or Android app before and want a guided path that doesn’t assume prior mobile development experience.

  • Cross-platform builders

    You want to create iOS and Android apps without maintaining two separate codebases, and you’re ready to commit to one language for both platforms.

  • iOS/Android developers

    You already know native development (Swift/Objective-C or Java/Kotlin) and want to expand into Flutter to ship cross-platform apps faster with a single approach.

Curriculum Overview

Start Now

Preview the structure and pacing of this course before you begin.

  • Introduction12 lectures1h 5m
    • 01What Is Flutter?2:49 min
    • 02Welcome To This Course!1:16 min
    • 03Flutter uses Dart!1:51 min
    • 04One Codebase, Multiple Platforms2:56 min
    • 05Flutter Setup - Overview3:58 min
    • 06Windows Setup13:26 min
    • 07macOS Setup17:53 min
    • 08Project Creation & Setting Up a Code Editor for Flutter Development5:10 min
    • 09Running a First Flutter App9:06 min
    • 10Understanding Material Design2:35 min
    • 11About This Course4:43 min
    • 12Course Resources (Code Snapshots, Community & Slides)0:00 min
  • Flutter & Dart Basics I - Getting a Solid Foundation [ROLL DICE APP]39 lectures3h 24m
    • 01Module Introduction1:21 min
    • 02Analyzing A New Flutter Project8:50 min
    • 03From Dart To Machine Code3:05 min
    • 04How Programming Languages Work5:51 min
    • 05Starting From Scratch: Understanding Functions6:05 min
    • 06Importing Features From Packages5:02 min
    • 07How Flutter Apps Start2:26 min
    • 08Understanding Widgets2:52 min
    • 09Using a First Widget & Passing Values to Functions4:37 min
    • 10Positional & Named Arguments3:58 min
    • 11Deep Dive: Position & Named Arguments0:00 min
    • 12Combining Multiple Widgets2:50 min
    • 13Understanding "const" Values3:58 min
    • 14Building More Complex Widget Trees7:25 min
    • 15Understanding Value Types6:54 min
    • 16Configuring Widgets & Understanding Objects7:24 min
    • 17Working with "Configuration Objects" (Non-Widget Objects)5:14 min
    • 18Generics, Lists & Adding Gradient Colors4:13 min
    • 19How To Configure Widgets & Objects3:03 min
    • 20Practice: Styling Text3:27 min
    • 21Onwards to Custom Widgets: Why Do You Need Them?2:37 min
    • 22Understanding Classes5:01 min
    • 23Building Custom Widgets9:27 min
    • 24Working with Constructor Functions5:56 min
    • 25Splitting Code Across Files3:18 min
    • 26Practice: Create a Custom Widget3:49 min
    • 27Introducing Variables5:22 min
    • 28Variables & Types - Combining Two Key Concepts2:23 min
    • 29"final" & "const" - Special Kinds Of "Variables"4:53 min
    • 30Instance Variables (Properties) & Configurable Widgets10:03 min
    • 31Practice: Reusable Widgets & Constructor Functions6:40 min
    • 32Displaying Images & Using Multiple Constructor Functions6:35 min
    • 33Adding Buttons & Using Functions As Values6:09 min
    • 34Styling Buttons & Working with Padding6:17 min
    • 35How NOT To Build Interactive Widgets3:48 min
    • 36Introducing Stateful Widgets15:06 min
    • 37Generating Random Numbers7:54 min
    • 38Module Summary10:21 min
    • 39Knowledge Check: Flutter & Dart Basics0:00 min
  • Flutter & Dart Basics II - Fundamentals Deep Dive [QUIZ APP]40 lectures4h 9m
    • 01Module Introduction2:01 min
    • 02A Challenge For You!2:21 min
    • 03Challenge Solution 1/2 - Creating a Widget11:46 min
    • 04Challenge Solution 2/2 - Working with More Widgets17:05 min
    • 05Adding Icons to Buttons3:43 min
    • 06Adding Transparency to Widgets4:22 min
    • 07Repetition & Exercise: Adding a Stateful Widget10:50 min
    • 08Rendering Content Conditionally7:02 min
    • 09Accepting & Passing Functions as Values9:16 min
    • 10The "initState" Method4:28 min
    • 11Deep Dive: Flutter's (Stateful) Widget Lifecyle0:00 min
    • 12Using Ternary Expressions & Comparison Operators7:05 min
    • 13Understanding "if" Statements4:52 min
    • 14Using "if" Statements In Lists0:00 min
    • 15if Statements & Comparison Operators0:00 min
    • 16Adding a Data Model & Dummy Data8:48 min
    • 17Configuring a Column5:35 min
    • 18Creating a Reusable, Custom Styled Button12:05 min
    • 19Accessing List Elements & Object Properties5:53 min
    • 20Mapping Lists & Using the Spread Operator7:45 min
    • 21Alignment, Margin & Padding3:57 min
    • 22Mutating Values in Memory5:46 min
    • 23Managing The Questions Index As State5:49 min
    • 24More on Button Styling1:20 min
    • 25Using Third-Party Packages & Adding Google Fonts7:26 min
    • 26Passing Data via Functions Across Widgets13:18 min
    • 27More Conditions4:27 min
    • 28Getting Started with the Results Screen8:02 min
    • 29Passing Data to the Results Screen2:40 min
    • 30Introducing Maps & "for" Loops12:00 min
    • 31Using "for" Loops In Lists0:00 min
    • 32Accessing Map Values & Using "Type Casting"10:53 min
    • 33Combining Columns & Rows6:07 min
    • 34Expanded To The Rescue!3:07 min
    • 35Filtering & Analyzing Lists7:43 min
    • 36Making Content Scrollable with SingleChildScrollView4:07 min
    • 37Time to Practice: Flutter Basics - Problem1:54 min
    • 38Time to Practice: Flutter Basics - Solution9:36 min
    • 39Beyond the Basics: Optional, Important Dart Features8:53 min
    • 40Module Summary7:32 min
  • Debugging Flutter Apps6 lectures32m
    • 01Module Introduction0:56 min
    • 02The Starting Project & A Problem1:08 min
    • 03Understanding Error Messages7:36 min
    • 04Debugging Apps & Using "Debug Mode"14:59 min
    • 05Working with the Flutter DevTools7:41 min
    • 06Running the App on Real iOS or Android Devices0:00 min
  • Adding Interactivity, More Widgets & Theming [EXPENSE TRACKER APP]35 lectures3h 46m
    • 01Module Introduction1:38 min
    • 02Starting Setup & Repetition Time!7:07 min
    • 03Adding an Expense Data Model with a Unique ID & Exploring Initializer Lists6:59 min
    • 04Introducing Enums4:10 min
    • 05Creating Dummy Data4:02 min
    • 06Efficiently Rendering Long Lists with ListView10:21 min
    • 07Using Lists Inside Of Lists2:27 min
    • 08Creating a Custom List Item with the Card & Spacer Widgets16:47 min
    • 09Using Icons & Formatting Dates7:25 min
    • 10Setting an AppBar with a Title & Actions6:46 min
    • 11Adding a Modal Sheet & Understanding Context7:24 min
    • 12Handling User (Text) Input with the TextField Widget8:14 min
    • 13Getting User Input on Every Keystroke4:53 min
    • 14Letting Flutter do the Work with TextEditingController4:10 min
    • 15Time to Practice: Adding a New Input - Problem1:11 min
    • 16Time to Practice: Adding a New Input - Solution3:50 min
    • 17Closing The Modal Manually1:47 min
    • 18Showing a Date Picker8:33 min
    • 19Working with "Futures" for Handling Data from the Future7:41 min
    • 20Adding a Dropdown Button10:57 min
    • 21Combining Conditions with AND and OR Operators7:48 min
    • 22Validating User Input & Showing an Error Dialog5:11 min
    • 23Saving New Expenses5:59 min
    • 24Creating a Fullscreen Modal2:02 min
    • 25Using the Dismissible Widget for Dismissing List Items7:46 min
    • 26Showing & Managing "Snackbars"9:13 min
    • 27Getting Started with Theming7:43 min
    • 28Setting & Using a Color Scheme6:39 min
    • 29Setting Text Themes9:00 min
    • 30Using Theme Data in Widgets9:02 min
    • 31Adding Dark Mode7:13 min
    • 32Using Another Kind of Loop (for-in)5:03 min
    • 33Adding Alternative Constructor Functions & Filtering Lists4:39 min
    • 34Adding Chart Widgets10:27 min
    • 35Module Summary2:45 min
  • Building Responsive & Adaptive User Interfaces [EXPENSE TRACKER APP]10 lectures51m
    • 01Module Introduction0:57 min
    • 02What is "Responsiveness"?2:06 min
    • 03Locking the Device Orientiation4:53 min
    • 04Updating the UI based on the Available Space7:55 min
    • 05Understanding Size Constraints7:09 min
    • 06Handling to Screen Overlays like the Soft Keyboard5:12 min
    • 07Understanding "Safe Areas"2:53 min
    • 08Using the LayoutBuilder Widget12:04 min
    • 09Building Adaptive Widgets7:14 min
    • 10Module Summary1:26 min
  • Flutter & Dart Internals [TODO APP]9 lectures41m
    • 01Module Introduction1:09 min
    • 02Three Trees: Widget Tree, Element Tree & Render Tree4:46 min
    • 03How The UI Is Updated6:51 min
    • 04Refactor & Extract Widgets To Avoid Unnecessary Builds6:34 min
    • 05Understanding Keys - Setup4:34 min
    • 06Which Problem Do Keys Solve?5:33 min
    • 07Understanding & Using Keys4:12 min
    • 08Mutating Values in Memory & Making Sense of var, final & const6:56 min
    • 09Module Summary0:55 min
  • Building Multi-Screen Apps & Navigating Between Screens [MEALS APP]27 lectures3h 23m
    • 01Module Introduction2:05 min
    • 02Project Setup1:35 min
    • 03Using a GridView7:58 min
    • 04Widgets vs Screens6:13 min
    • 05Displaying Category Items on a Screen8:02 min
    • 06Making any Widget Tappable with InkWell3:34 min
    • 07Adding Meals Data5:20 min
    • 08Loading Meals Data Into a Screen6:37 min
    • 09Adding Cross-Screen Navigation8:41 min
    • 10Passing Data to the Target Screen4:53 min
    • 11Introducing the Stack Widget17:01 min
    • 12Improving the MealItem Widget11:53 min
    • 13Adding Navigation to the MealDetails Screen9:58 min
    • 14Improving the MealDetails Screen8:15 min
    • 15Adding Tab-based Navigation16:34 min
    • 16Passing Functions Through Multiple Layers of Widgets (for State Management)11:55 min
    • 17Managing App-wide State & Data5:28 min
    • 18Adding a Side Drawer14:08 min
    • 19Closing the Drawer Manually5:35 min
    • 20Adding a Filter Item7:33 min
    • 21Replacing Screens (Instead of Pushing)7:58 min
    • 22Adding More Filter Options2:44 min
    • 23Returning Data When Leaving a Screen6:18 min
    • 24Reading & Using Returned Data4:31 min
    • 25Applying Filters15:50 min
    • 26An Alternative Navigation Pattern: Using Named Routes0:00 min
    • 27Module Summary3:04 min

And 7 more sections in the full course.

Ready to Get Started?

Choose the option that works best for you.

Single Course

Flutter & Dart - The Complete Guide

One Payment. Lifetime Access.

$99one-time

  • One-time payment
  • All future updates for this course
  • Downloadable resources & code
  • Certificate of completion
  • Hands-on exercises & projects
  • Self-paced learning
  • English captions on all videos
  • Lifetime access