Setup + How programs run (1–2 days)
3 lessonsRun Dart locally or in DartPad - Understand execution flow: top-to-bottom inside `main()` - `main()`, `print()` - Comments: `//`, `/* */`
Dart track
Markdown in, static HTML out. One idea per slide; keyboard through the deck, then step to the next lesson when you are ready.
Continue resumes your last slide via local storage in your browser — no accounts.
Table of contents
Work top to bottom. Each stop opens the level index: pick a markdown module and read it as a slide deck.
The line is the promise — discrete levels, cumulative skill. Orange nodes are live; muted ones are planned.
Run Dart locally or in DartPad - Understand execution flow: top-to-bottom inside `main()` - `main()`, `print()` - Comments: `//`, `/* */`
Write logic with conditions and loops - Types: `int`, `double`, `String`, `bool` - Variables: `var`, explicit types, `final`, `const` - Operators: math + comparison + logical
Write reusable code and manage lists/maps safely - Functions: params, return values - Named/optional params - Collections: `List`, `Set`, `Map`
Model real-world concepts with classes - Classes/objects, constructors, `this` - Private members: `_field` - Getters/setters (use only when needed)
Prevent bugs by controlling state changes - Mutable vs immutable (core concept) - What mutation is and why it causes hidden bugs - Final fields and immutable classes
Write scalable architecture with strong typing - `abstract class` - `implements` vs `extends` - Polymorphism
Avoid crashes and handle failures cleanly - Null safety: `T` vs `T?` - `?.`, `??`, `??=`, avoid `!` - Exceptions: `try`/`catch`/`finally`, `throw`
Read/write data like real apps (APIs, files) - JSON basics: `dart:convert` (`jsonEncode`, `jsonDecode`) - Convert JSON ↔ Dart models - Manual `toJson`/`fromJson`
Persist your app data locally - Read/write files (`dart:io`) - Paths, directories (basic) - Async file operations
Understand concurrency and avoid blocking - `Future`, `async`/`await` - `Future.wait`, timeouts, retries - Event loop concept
Handle continuous events and updates - Stream vs Future - StreamController - `listen`/`cancel`
Parallel CPU work safely - Isolates are Dart (not Flutter) - Separate memory + message passing - When to use isolates
Naming conventions (PascalCase / camelCase / isHasCan) - DRY (don't over-abstract) - Small functions, early returns - Folder structure + separation of concerns
Clean architecture thinking, not just theory - **S:** Split "God classes" - **O:** Extend behavior without editing old logic (Strategy) - **L:** Safe subclass behavior
Notification sender chooser - `SenderFactory.create(type)` - Dev vs Prod notification families - DevNotificationFactory, ProdNotificationFactory
Scalable and testable apps - Constructor injection - DI container concept - Service locator pitfalls