This course was created with the
course builder. Create your online course today.
Start now
Create your course
with
Autoplay
Autocomplete
Previous Lesson
Complete and Continue
Flutter Foundations Course - The Essentials
1. Intro & Project Overview (44m)
1. What you will learn in this course (3:14)
2. Section overview (1:15)
3. VSCode Shortcuts, Extensions & Settings for Flutter development (1:44)
4. Join the Discord Server (0:48)
5. Course Project on GitHub (2:01)
6. Download the Starter Project & pubspec.yaml overview (5:26)
7. eCommerce app overview (3:38)
8. Project structure & code walkthrough (6:25)
9. Exploring the codebase with the Widget Inspector (DevTools) (3:38)
10. UI Design Principles: Composition & Reusable Widget Classes (5:02)
11. Useful Widgets for Responsive Design (8:24)
12. App Localization (3:45)
Request for Feedback (optional)
2. Navigation with GoRouter (1h10m)
1. Section Intro (2:51)
2. Limitations of Navigator 1.0 (6:54)
3. GoRouter installation & initial setup with MaterialApp.router (6:27)
4. Routes, sub-routes and navigation (7:43)
5. GoRouterHelper Extension and pageBuilder (3:54)
6. Adding some additional routes (6:18)
7. Routing by path vs routing by name (4:35)
8. Routing with parameters (6:30)
9. GoRouter Error Handling (3:45)
10. Navigating with go vs push (3:40)
11. Adding the remaining routes (6:13)
12. How to pop a route with GoRouter (4:22)
13. Nested Navigation (1:40)
14. Wrap up + Exercise (3:38)
Request for feedback (optional)
3. Flutter App Architecture (38m)
1. Section Intro (1:56)
2. Popular App Architectures: MVC, MVP, MVVM, Clean Architecture, Bloc (4:15)
3. Riverpod App Architecture with the Controller-Service-Repository Pattern (6:17)
4. Project Structure: Feature-first vs Layer-first (6:23)
5. The Repository Pattern and the Data Layer (4:23)
6. Implementing the "fake" products repository as a singleton (5:34)
7. Working with Future and Stream-based APIs (6:45)
8. Wrap Up (2:27)
Request for Feedback (optional)
4. State Management with Riverpod - Part 1 (58min)
1. Section Intro (3:49)
2. Introduction to Riverpod (4:50)
3. Riverpod installation and setup (3:35)
4. Creating our first provider (4:25)
5. Reading providers with ConsumerWidget and Consumer (7:11)
6. Working with FutureProvider, StreamProvider, and AsyncValue (6:34)
7. Testing AsyncValue by adding a delay (3:24)
8. The family modifier (5:41)
9. The autoDispose modifier + advanced data caching options (9:33)
10. Creating a reusable AsyncValueWidget helper (8:17)
11. Wrap Up + Exercise (2:43)
Request for Feedback (optional)
5. State Management with Riverpod - Part 2 (1h42m)
1. Section intro (2:25)
2. Implementing a fake authentication repository (4:36)
3. Creating repositories using abstract classes (optional) (3:58)
4. Intro: a reactive in-memory store with RxDart (3:13)
5. Implementing the InMemoryStore with RxDart (5:02)
6. Using the InMemoryStore in the FakeAuthRepository (4:53)
7. Accessing the FakeAuthRepository with ref.read() in the AccountScreen (3:54)
8. Creating our first controller using StateNotifier (7:46)
9. Using the StateNotifier inside the AccountScreen widget (3:48)
10. Listening to provider state changes with ref.listen() (6:48)
11. Bug-fix for Navigator.pop (2:37)
12. The AsyncValue.guard method (2:09)
13. Adding an AsyncValue extension method (3:28)
14. Using the authStateChangesProvider in HomeAppBar (5:29)
15. Intro to the email & password sign-in screen (4:52)
16. How to generate immutable state classes in Dart (EmailPasswordSignInState) (3:05)
17. Using AsyncValue inside EmailPasswordSignInState (2:20)
18. Implementing the EmailPasswordSignInController (6:31)
19. Using the EmailPasswordSignInController in the widget class (7:26)
20. Bug fix + filtering state updates with select() (5:48)
21. GoRouter redirects (5:58)
22. GoRouter: the refreshListenable argument (5:12)
23. Wrap Up + Exercise (2:00)
Request for Feedback (optional)
6. Automated Testing - Part 1 (1h31m)
1. Section Intro (1:59)
2. Introduction to Automated Testing and the Testing Pyramid (4:43)
3. Getting started with automated testing (2:28)
4. Writing the first unit test + adding toString() and equality implementations (4:09)
5. Test matchers and working with methods that throw exceptions (6:18)
6. Fixing the getProduct() method and updating the unit tests (3:39)
7. Working with groups and testing Futures and Streams (4:57)
8. Adding an optional delay to the FakeProductsRepository (4:14)
9. How to generate a Flutter test coverage report in VSCode (3:41)
10. Testing the FakeAuthRepository (part 1) (6:26)
11. Testing the FakeAuthRepository (part 2) + advanced stream matchers (7:00)
12. Mocks vs Fakes + installing the mocktail package (2:45)
13. Testing the AccountScreenController (part 1) + AsyncValue subclasses (4:41)
14. Testing the AccountScreenController (part 2) + working with mocks (7:35)
15. Testing the AccountScreenController (part 3) + type matchers (3:12)
16. Testing with Stream Matchers and Predicates (5:58)
17. Testing lifecycle methods (setUp, tearDown, setUpAll, tearDownAll) (4:48)
18. Testing the EmailPasswordSignInController with Acceptance Criteria (7:07)
19. Testing the EmailPasswordSignInController (part 2) (6:23)
20. Tip: setting custom test timeouts per-file (2:07)
21. Adding a test workflow to automate testing with GitHub Actions (3:26)
22. Wrap up (1:18)
Request for Feedback (optional)
Conclusion & Next Steps
Conclusion & Next Steps
9. Exploring the codebase with the Widget Inspector (DevTools)
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock