Free through lesson 3

Dart & Flutter for Beginners

From setup through Dart syntax, widgets and layout, navigation and forms, state management with Riverpod, HTTP and storage, testing, and signing and store submission. Over 50 lessons, you'll get to the point where you can build a memo app, with tests, that ships to iOS, Android, and the web from a single codebase. Every piece of code and every output shown was actually run on Flutter 3.47.5 / Dart 3.13.4.

Curriculum

The 50 lessons are split into 7 chapters. We recommend going in order from chapter 1, but feel free to jump to whatever interests you. Note: the code can't run in the browser, so install Flutter SDK 3.47.x locally and try it with dart run and flutter test. Chapters 1 to 5 need no device or emulator. From chapter 6 on, you'll use a simulator and an emulator.

Chapter 1 — Dart Syntax (lessons 1–9)

We cover just the Dart you need to read Flutter code, running everything as we go. We work through types and null safety, collections, classes, sealed classes, and async. Once you finish this chapter, the code in chapter 2 onward won't stop you with "syntax I've never seen."

1

How Dart and Flutter Relate (and How They Differ from Flet)

What Flutter does, and that the language it uses is Dart. We start by sorting out how it differs from Flet, which you use from Python.

Free
2

Setting Up and Running with dart run

How to install the Flutter SDK and check that it's installed. Run a single file with dart run and learn to read flutter doctor.

Free
3

Variables and Types (var, final, const)

Type inference with var, the difference between final and const, and common built-in types. See for yourself that const values are fixed at compile time.

Free
4

Null Safety (?, ?., ??, !)

How Dart separates types that can hold null from those that can't. Safely navigate with ?. and ??, and learn when it's OK to use !.

🔒 Basic
5

Collections (List, Map, Set)

When to use each of the three collections, and transforming them with map, where, and friends. See how spreads and collection if shorten UI code.

🔒 Basic
6

Functions and Named Parameters

Named parameters and required, used everywhere in Flutter code. Get comfortable passing functions as arguments: anonymous functions, arrows, and closures.

🔒 Basic
7

Classes and Constructors

The this.x shorthand, named constructors, getters, inheritance, and mixins. Write copyWith to lay the groundwork for replacing state later.

🔒 Basic
8

Sealed Classes and Switch Expressions

How to express "exactly one of these" with types. Patterns in switch expressions, and letting the compiler find missing cases. Records too.

🔒 Basic
9

Async (Future, async/await, Stream)

How to write slow operations. Run code to see what happens before and after await, how to catch errors, and how Streams deliver values over and over.

🔒 Basic

Chapter 2 — Getting Flutter Running (lessons 10–16)

You'll create a project, show your first screen, and learn the widget tree, StatelessWidget and StatefulWidget, and the basics of layout. At the end, you'll measure the rule "constraints go down, sizes go up" for yourself, until you can fix overflow errors on your own.

Chapter 3 — Building Screens (lessons 17–24)

You'll put together lists, scrolling, navigation, input forms, and themes to build screens that feel like a real app. At the end, you'll build a memo list screen, the starting point we'll lift into state management in the next chapter.

Chapter 4 — State Management (lessons 25–31)

First you'll see exactly where setState hits its limits, then move values out of the widget tree with InheritedWidget and Riverpod. You'll narrow what gets rebuilt while counting rebuilds, and finally move the memo app onto Riverpod.

Chapter 5 — Connecting to the Outside World (lessons 32–38)

You'll run a local server and make HTTP round trips, map JSON onto types, and represent kinds of failure with types. Then you'll move on to saving settings and files, and finish with a memo app whose data survives closing and reopening.

Chapter 6 — Device Features and Testing (lessons 39–44)

You'll learn how to branch by platform and how the permission flow works, and how to write the three kinds of tests: unit, widget, and integration. We also cover how to read a failing test, so red output won't leave you stuck.

Chapter 7 — Shipping (lessons 45–50)

Starting from the difference between debug and release, you'll go through Android signing, iOS builds, icons, and store submission prep with real commands. Finally, we line Flutter up against Flet once more and give you a map of where to go next.

Once you finish all 50 lessons, try the Flet Fundamentals Course, which uses the same rendering from Python; the Kotlin & Android Intro Course or Swift for Beginners to see things from the native side; or API Design for Beginners to design the APIs your apps talk to. A membership unlocks every course.