Flutter Foundations Course
Learn about State Management, App Architecture, Navigation, Testing, and much more by building a Flutter eCommerce app on iOS, Android, and web.
--
Completed
--
Lessons completed
Login
to track your course
progress
Module 1
Intro and Project Overview
A general introduction to the course and overview of the eCommerce app we will build. As part of this module, I'll share a starter project and give you a walkthrough of the existing code.
Module 2
Navigation with GoRouter
An introduction to declarative routing in Flutter. In this module, we will migrate the eCommerce app from Navigator 1.0 to the new GoRouter APIs.
Module 3
Flutter App Architecture
This module introduces a scalable app architecture composed of four layers (data, domain, application, and presentation), and covers the project structure that we will use when adding features to our eCommerce app. We also implement our first repository and talk about Future vs Stream-based APIs.
Module 4
Flutter Riverpod - Part 1 (Product Listings)
In this module, we get started with Riverpod by covering Providers, Consumers, and modifiers such as 'family' and 'autoDispose'. We also learn how to use Riverpod as a DI system for our project, and get practice working with FutureProvider and StreamProvider when reading data. We also explore couple of advanced features.
Module 5
Flutter Riverpod - Part 2 (Authentication Flows)
In this module we'll use Riverpod to implement the authentication flows in the app. As part of this, we'll learn about data mutations, how to use controllers to manage the widget state, how to listen to state changes, how to work with redirects with GoRouter, and much more.
Module 6
Automated Testing - Part 1
Learn how to write unit tests in Flutter. Including how to work with test matchers, futures & streams, how to generate test coverage data, how to mock depedencies, and automate your test workflows with GitHub Actions.
Module 7
Automated Testing - Part 2
Learn how to write widget, integration, and golden image tests in Flutter. Also included: how to use finders and the WidgetTester APIs, how to make tests more readable with Robot Testing, how to override providers during testing, how to preload fonts, icons, and image tests, and much more.
Module 8
Feature: Shopping Cart
In this module we build the most complex feature of the eCommerce app. After outlining the requirements, we analyze the tradeoffs of various solutions, and proceed to the implementation stage. Along the way, we explore the application layer and learn about some advanced Riverpod features when writing and testing providers.
Module 9
Feature: Checkout Flows
In this module we build the checkout flows (registration, payment) for the eCommerce app, implement the client-side logic for placing orders, and add the corresponding unit, widget, and integration tests.
Module 10
Error Handling
This module is about various strategies for handling errors in Flutter. Inside, we learn how to create exception types using sealed classes (new in Dart 3.0), how to create a robust error handling system, and how to log errors using ProviderObserver. Finally, we briefly cover the topic of functional error handling with Result types vs try/catch.
Module 11
Feature: Product Reviews
In this module we build a product reviews feature for the eCommerce app. As part of this, we learn how to submit or edit form data, how to calculate the average review score, and discuss some tradeoffs when building reactive UIs.
Module 12
Feature: Product Search
In this module we build a product search feature for the eCommerce app. We'll start with an overview of client vs server-side search, then we'll write a search service class, learn how to debounce queries, and discuss tradeoffs when using Futures vs Streams.
Module 13
New Riverpod 2.x APIs & Riverpod Generator
In this module we explore the Riverpod Generator package and how to use it with the new @riverpod syntax. And we also learn about the AsyncNotifier class (introduced in Riverpod 2.0) and refactor our eCommerce app to use the new APIs.