Articles & Reference guides
This is a collection of articles and reference guides that are relevant for this course.
You can use them to get a better understanding of the topics covered in this course, or to fill any gaps in your knowledge.
Firebase
This course covers many Firebase features in detail.
Here are some useful resources to get you started:
- Firebase documentation
- FlutterFire documentation (outdated but still very useful)
I have also written some articles on my site:
- How to add Firebase to a Flutter app with FlutterFire CLI
- Flutter Flavors Setup with multiple Firebase Environments using FlutterFire and Very Good CLI
- Firebase Cloud Functions: Introduction and Project Setup
- Flutter Tutorial: How to use the Firebase Local Emulator with Cloud Functions
Cloud Firestore
For an in-depth explanation of what Cloud Firestore is and how it works, check this playlist by the official Firebase team:
IDE Setup
Guides about how to setup your IDE for both VSCode and Android Studio:
- VSCode Shortcuts, Extensions & Settings for Flutter Development
- IntelliJ / Android Studio Shortcuts for Flutter Development
App Architecture
App architecture is a major focus in this course.
To complement the course material, I have written some reference articles.
Get started with these:
- Flutter App Architecture with Riverpod: An Introduction
- Flutter Project Structure: Feature-first or Layer-first?
Then, learn about each of the four main layers (data, domain, application, presentation):
- Flutter App Architecture: The Repository Pattern
- Flutter App Architecture: The Domain Model
- Flutter App Architecture: The Presentation Layer
- Flutter App Architecture: The Application Layer
Navigation with GoRouter
In this course, we use GoRouter for navigation.
To get started, head to the GoRouter package on pub.dev.
There is also a very extensive documentation site explaining all the most important concepts (though note that this is no longer maintained):
Additional articles from my site:
- Flutter Navigation with GoRouter: Go vs Push
- Flutter Bottom Navigation Bar with Nested Routes: GoRouter vs Beamer Comparison
- How to Navigate Without Context with GoRouter and Riverpod in Flutter
State Management & Riverpod
The course assumes you already have a basic understanding of state management in Flutter.
If you need a refrehsher, read this:
Then, dive into Riverpod with my ultimate guide:
Latest Riverpod 2.0 articles:
- How to Auto-Generate your Providers with Flutter Riverpod Generator
- How to use Notifier and AsyncNotifier with the new Flutter Riverpod Generator
- How to Unit Test AsyncNotifier Subclasses with Riverpod 2.0 in Flutter
- Riverpod Data Caching and Providers Lifecycle: Full Guide
Additional Riverpod articles to complement the course material:
- How to handle loading and error states with StateNotifier & AsyncValue in Flutter
- Flutter Riverpod Tip: Use AsyncValue rather than FutureBuilder or StreamBuilder
- AsyncValueWidget: a reusable Flutter widget to work with AsyncValue (using Riverpod)
- Flutter Riverpod: How to Register a Listener during App Startup
Testing
The course project already includes unit, widget, and integration tests.
Here are some articles on this topic:
- How to Write Tests using Stream Matchers and Predicates in Flutter
- How to Generate and Analyze a Flutter Test Coverage Report in VSCode
- How to test functions that throw in Flutter
- How to Add a Custom Test Timeout in Flutter
Design Patterns
The course assumes you’re already familiar with the most common design patterns.
Here’s some additional articles to help you out:
- Singletons in Flutter: How to Avoid Them and What to do Instead
- Side Effects in Flutter: What they are and how to avoid them
UI, Layouts & Animations
While some responsive UI concepts are introduced in section 1, this is not a course about building UIs.
Here are some additional resources:
- Responsive layouts in Flutter: Split View and Drawer Navigation
- How to create a Flutter GridView with content-sized items
JSON & Serialization
For the most part, we will use the Dart Data Class Generator extension to generate our data models.
Alternatives such as Freezed exist, and you can learn more broadly about JSON serialization here:
- How to Parse JSON in Dart/Flutter: The Essential Guide
- How to Parse JSON in Dart/Flutter with Code Generation using Freezed
- How to Parse Large JSON Data with Isolates in Dart 2.15
Error Handling
Here are some resources:
- Flutter Exception Handling with try/catch and the Result type
- Functional Error Handling with Either and fpdart in Flutter: An Introduction
Localization
The official Flutter documentation contains the most complete info about localization:
I’ve also shared these articles on my site:
- Simplified Flutter Localization using a BuildContext extension
- How to Read Localized Strings Outside the Widgets using Riverpod
Dart Language
The course assumes you’re already proficient with the Dart language.
If you need a refresher, I recommend these resources:
- Dart Documentation
- The Complete Dart Developer Guide (my beginners course)
I have also written some articles here:
- Dart Null Safety: The Ultimate Guide to Non-Nullable Types
- Migrating a Flutter & Firebase app to Null Safety: A Case Study
- Top 16 Dart Tips and Tricks Every Flutter Developer Should Know
- Dart Extensions: Full Introduction and Practical Use Cases
Flutter in Production
In this follow-up course, you’ll learn how to ship and monitor your Flutter apps in production:
I have also written some articles about this on my site:
- 6 Key Steps to Take Before Releasing your Next Flutter App
- How to Store API Keys in Flutter: —dart-define vs .env files
- How to Setup Flutter & Firebase with Multiple Flavors using the FlutterFire CLI
- How to Ask for In-App Reviews in Your Flutter App
Happy coding!