Flutter in Production

Learn about flavors, environments, error monitoring, analytics, release management, CI/CD, and finally ship your Flutter apps to the stores. 🚀

--

Completed

--

Lessons completed

to track your course
progress

Module 1

Course Introduction

An overview of the course structure and topics covered, along with a walkthrough of the companion app for this course.

01 - Welcome to Flutter in Production! 🎉
02 - Join Code With Andrea on Discord
03 - Intro to the Flutter App Release Checklist
04 - Intro to the Starter Project
05 - Starter Project: Code Walkthrough
06 - Wrap Up
07 - Request for Feedback

Module 2

Launcher Icons and Splash Screens

Learn how to generate your launcher icons and launch screens on Android, iOS, and web.

01 - Intro to Launcher Icons
02 - Generating App Icons with Flutter Launcher Icons
03 - Launcher Icon Guidelines and Android Adaptive Icons
04 - How to Design Your App Icons in Figma
8:11
05 - Flutter Launcher Icons Checklist
06 - Generating Custom Splash Screens with Flutter Native Splash
07 - Launcher Icons and Splash Screens: Wrap Up
08 - Request for Feedback

Module 3

Adding Flavors to a Flutter App

A complete guide to flavors in Flutter. What are flavors, why do we need them, and how to configure them on Android and iOS (both for new and existing apps).

01 - Intro to Flavors and Environments
02 - The Difference Between Flavors and Dart Defines
03 - Flutter Flavorizr: Introduction
04 - Flutter Flavorizr: Icons Setup
05 - Flutter Flavorizr: Android Setup
06 - Flutter Flavorizr: iOS Setup
07 - Single or Multiple Entry Points?
08 - Flutter Flavors: IDE Setup (VSCode)
09 - Flutter Flavors: IDE Setup (Android Studio)
10 - How to Enable Flavors on Flutter Web
11 - Flutter Flavors Checklist
12 - Manual Flavors: Introduction and Android Setup
13 - Manual Flavors: iOS Setup
14 - Whitelabel App: Challenge
15 - Whitelabel App: Solution and Checklist
16 - Intro to Multiple Flavors with Flutter & Firebase
17 - Creating Multiple Firebase Projects
18 - FlutterFire Setup with Multiple Flavors
19 - Multi-Flavor Firebase Initialization in Dart
20 - Firebase Flavors Checklist
21 - Flutter Flavors: Wrap Up
22 - Request for Feedback

Module 4

Error Monitoring with Sentry

How to use Sentry to report, monitor, diagnose, and fix errors in your Flutter app when running in production.

01 - Intro to Error Monitoring
02 - Sentry vs Crashlytics: A Comparison
03 - Sentry Setup: Basics
04 - Sentry Setup: Environments and Flavors
05 - Fixing the First Real Issue (Zone Mismatch Error)
06 - Case Study: Capturing Exceptions Explicitly with Sentry
07 - Sentry: Dashboard Overview and Issue Resolution Workflow
5:20
08 - How to Collect User Feedback with Sentry
09 - Sentry: Additional Options and APIs
10 - Error Monitoring Basics, Source Maps, and dSYMs
11 - How to Upload Source Maps and dSYMs with the Sentry Dart Plugin
12 - Sentry Setup Checklist
13 - How to Minimize Your Sentry Bill
14 - Error Monitoring: Wrap Up
15 - Request for Feedback

Module 5

Analytics with Mixpanel and Firebase Analytics

How to setup analytics in your Flutter client app, including: choosing an analytics provider, tracking events and screen views, enabling/disabling analytics, and some real-world examples.

01 - Intro to Analytics
02 - Comparison of Popular Analytics Providers
03 - Firebase Analytics vs Mixpanel
04 - Introduction to Event Tracking
05 - App Analytics: Requirements and Architecture Overview
06 - App Analytics: Implementation Details
07 - Tracking Custom Events
08 - Tracking Navigation Events
09 - Enabling or Disabling Analytics: Letting Users Choose
10 - App Analytics: Identify Users
11 - Mixpanel: Project Setup
12 - Mixpanel: Flutter Setup
13 - Mixpanel Dashboard Overview
5:34
14 - Mixpanel: Debugging and Other Useful Features
15 - Firebase Analytics: FlutterFire Recap
16 - Firebase Analytics: Flutter Setup
17 - Analytics Setup Checklist
18 - Analytics: Wrap Up
19 - Request for Feedback

Module 6

Force Update Strategies

How to implement different force update strategies depending on your app type and backend.

01 - Intro to Force Update
02 - Force Update with the Upgrader Package
03 - Introduction to Force Update with Remote Config
04 - The Force Update Helper package
05 - Force Update with a GitHub Gist
06 - Force Update with Firebase Remote Config
07 - Force Update with Dart Shelf
08 - Force Update Checklist
09 - Wrap Up
10 - Request for Feedback

Module 7

Asking for In-App Reviews

How and when to ask for reviews in your mobile app using the in_app_review package.

01 - How to Ask for In-App Reviews
02 - Showing the In-App Review Prompt with requestReview
03 - Showing the Review Prompt at the Right Time
04 - Asking for Reviews with openStoreListing
05 - In-App Review Checklist
06 - Wrap Up
07 - Request for Feedback

Module 8

Creating a Landing Page for Your App

How to create a simple landing page for your app and deploy it to GitHub pages. Also included: how to generate a Privacy Policy and the Terms of Use.

01 - Intro: do you need a Landing Page?
02 - Landing Page Template: Setup Guide
03 - Deploy your Website to GitHub Pages
04 - How to Generate the Privacy Policy and Terms of Use
05 - Adding the Website Links to the Settings Page
06 - Wrap Up
07 - Request for Feedback

Module 9

Releasing Your iOS App on the App Store

How to register to the Apple Developer Program, plus everything you need to ship the first version of your app to the App Store.

01 - Intro: Releasing Your iOS App to the App Store
02 - App Store: The Good, Bad, and Ugly
03 - Apple Developer Program Overview
04 - How to Join the Apple Developer Program
05 - Trader Status for Developers Distributing Apps in the EU
06 - Apple Developer Account & App Store Connect: Overview
07 - How to Register a New App ID
08 - Creating a New iOS App on App Store Connect
09 - Preparing for Review: App Information
10 - Preparing for Review: App Privacy and Data Collection
11 - Preparing for Review: Pricing and Availability
12 - Adding a Privacy Manifest in Xcode
13 - Reviewing the Xcode Project Settings
14 - Code Signing, Certificates, and Provisioning Profiles
15 - Building, Uploading, and Submitting your iOS app to App Store Connect
16 - The App Review Process
17 - Submitting App Updates to App Store Connect
18 - Uploading Builds with xcrun and the App Store Connect API
19 - Distributing Your App for Beta Testing via TestFlight
20 - iOS App Release Checklist
21 - Request for Feedback

Module 10

Releasing Your Android App on the Google Play Store

How to register for the Play Store Account, plus everything you need to ship the first version of your app to the Google Play Store.

01 - Intro: Releasing Your Android App to the Play Store
02 - Play Store: The Good, Bad, and Ugly
03 - Choosing your Developer Account Type (Individual or Organization)
04 - Creating a Play Console Developer Account (Individual)
05 - Creating a Play Console Developer Account (Organization)
06 - Creating a New App on the Google Play Console
07 - Preparing for Review: App Content
08 - Preparing for Review: Data Safety
09 - Preparing for Review: Store Listing
10 - Testing and Production Tracks: Overview
11 - Reviewing the Android Project Settings
12 - Configuring Code Signing on Android
13 - Building, Uploading, and Submitting your Android App to Google Play
14 - The App Review Process
15 - Submitting App Updates to the Google Play Console
16 - How to Use the Internal, Closed, and Open Testing Tracks
17 - Android App Release Checklist
18 - Request for Feedback

Upcoming Modules

More modules are coming soon, covering app store submissions, release automation, and more.

01 - Coming Soon

Appendix 1

A Riverpod Primer

An introduction to the Riverpod package, including: providers and consumers, asynchronous providers, notifiers, dependency management, data caching, and additional techniques.

01 - Intro to Riverpod
02 - How to Manage Dependencies in Flutter
03 - Riverpod: Installation and Setup
04 - Introduction to Providers and Consumers
05 - The difference between ref.read and ref.watch
06 - Asynchronous Providers in Riverpod
07 - Passing Arguments to Providers (Families)
08 - Introduction to Riverpod Notifiers
09 - Asynchronous Notifiers in Riverpod
10 - Eager Provider Initialization and Usage with requireValue
11 - The Provider Lifecycle and when to use keepAlive
12 - Wrap Up
13 - Request for Feedback

Appendix 2

Common Problems and Solutions

Solutions to common problems including: version conflicts, upgrading dependencies, Cocoapods and Gradle issues.

01 - List of Common Problems and Solutions
02 - Android: Failed to transform core-for-system-modules.jar to match attributes errors with JDK 21
03 - Android Gradle version incompatible with Java version
04 - Android Gradle plugin requires Java 17 to run
05 - Your project is configured with Android NDK 23.1.7779620, but the following plugin(s) depend on a different Android NDK version
06 - App Stuck on the Splash Screen
07 - Fixing Build Issues - Nuclear Option 💣
08 - source value 8 is obsolete and will be removed in a future release
09 - Request for Feedback