Learning Flutter
Wait, what is Flutter™ ?
A framework for simultaneous publication of apps for Apple and Google Android devices
Flutter is an open source framework by Google for building beautiful, natively compiled, multi-platform applications from a single codebase.
I create mobile applications that can be published in the App Store and Google Play. I'm not a hard core developer, I have professional developers working with me in my clients and contracted work. But I am a product manager / interim CTO.
It seemed to me that going through the whole process of app creation and management and documenting it for others would be useful. I've been writing requirements and producing mobile applications for decades but I thought I'd like to learn at a far deeper level about Flutter just for fun and because cross platform applications are something I have a passion for. This is my learned experience of picking up these development tools and seeing what I can do.
Books
You might enjoy printed books. If you do then this one would be a strong pick - Flutter for Beginners: An introductory guide to building cross-platform mobile applications with Flutter 2.5 and Dart, 2nd Edition. As is Flutter Projects: A practical, project-based guide to building real-world cross-platform mobile applications and games (both on Amazon UK).

Of course, one does not simply publish an app.
In order to publish an app you have to plan, code, build, test, publish, operate, monitor, manage and update it. This is a familiar pattern these days, its sometimes called 'devops', and it can't be avoided, for if you skip elements of it then updating your app or managing it might become impossible over time. You don't want that! So while this collection of articles is based around Flutter it is also about all the surrounding disciplines that need to be considered as part of development and operating a cross platform mobile application and the inevitable platform behind it.
Flutter tech notes and demos
Build and publish a Flutter-based app for the App Store and Google Play — updated for 2026 with current tooling, current hardware, and current best practices.
Follow along to learn everything you need to set up your environment, build a Flutter-based app, put it into source control, and publish it to the App Store and Google Play. Along the way you will need some third-party tools and services. The ones used here are chosen to be the simplest viable set, but you are free to make other choices. We have published hundreds of apps for both stores and will cover wider topics around publication and ongoing distribution. One of those topics — licenses — appears in this very first article. Don't skip it.

TL:DR – Start here. Get all the tools required and build your first mobile app using Flutter on a Mac with Apple silicon. Every Mac Apple sells today runs Apple silicon, and Flutter's toolchain in 2026 reflects that reality.
- Details
Build and publish a Flutter-based app for the App Store and Google Play — updated for 2026 with current tooling, shortcuts, and Flutter 3.44 features.
Hot reload is one of Flutter's most compelling advantages for mobile development. The ability to see UI changes reflected on a running device in under a second — without losing app state — transforms the way you iterate on a design. If you haven't used it before, you'll quickly wonder how you ever managed without it.
TL:DR – Start by following the instructions in Getting started with Flutter on a Mac and then you'll be able to complete the tasks in this article.
- Details
Build and publish a Flutter-based app for the App Store and Google Play — updated for 2026, where Material Design 3 (also called Material You) is now the default and the tooling has moved on significantly.
2014 Baseline Material color theme
Material Design 2 was the standard and a 12-colour baseline theme was the starting point for every Flutter ap. This 2014 Baseline Material color theme made its debut with a built-in, baseline theme with 12 colours named and defined. Much has changed but these building blocks are important to understand as you think about the colours in your app.
| Primary #6200EE |
Primary Variant #3700B3 |
Secondary #03DAC6 |
Secondary Variant #018786 |
| Background #FFFFFF |
Surface #FFFFFF |
Error #B00020 |
| On Primary #FFFFFF |
On Secondary #000000 |
| On Background #000000 |
On Surface #000000 |
On Error #FFFFFF |
Material Design 3 and Material Theme Builder
That world has changed substantially. Material Design 3 is now Flutter's default theming system, and the colour model has expanded from 12 named roles to over 30, built around a dynamic, tonal palette system. The old primarySwatch and MaterialColor approach is now deprecated in favour of ColorScheme and ThemeData.colorScheme.
The tooling has changed too. The original Material Design Colour Tool at material.io has been retired. Its replacement is the Material Theme Builder, available at material-foundation.github.io/material-theme-builder/. This tool generates a complete Material 3 colour scheme — including light and dark variants — from a single source colour, and can export directly to Flutter Dart code. It is the tool you should be using today.
This article has been revised throughout to reflect these changes. The core ideas — picking colours that complement your logo, understanding colour roles, and supporting both light and dark appearance — remain just as relevant. The implementation is simply more powerful now.
TL:DR – The colours in a mobile app can look polished if you pay attention to themes and colour choices. Modern tools make it easier than ever to generate a full Material 3 colour scheme from your brand colour, and this article shows how.
- Details
Read more: Making mobile apps look better - theme and colours
Build and publish a Flutter-based app for the App Store and Google Play — revisited and updated for 2026, where dark and light appearance support is no longer optional: it is a baseline expectation for every app on every platform.
TL:DR – When this article was first written, dark mode felt like a novelty feature. That is no longer the case. Dark appearance support is no longer a nice-to-have. It is a baseline expectation on both platforms, and the tooling in Flutter has matured significantly to make it straightforward. If you are starting fresh, use Material 3 and ColorScheme.fromSeed. If you are maintaining an existing Material 2 app, plan your migration to the new type scale and colour roles. Either way, address appearance early in your design process: retrofitting it into a large codebase is genuinely painful.
- Details
Build and publish a Flutter app for the App Store and Google Play — updated for 2026 with current Flutter conventions and navigation best practices.
Apps that open with a mandatory sign-in screen lose users fast. Tolerance for friction at launch has only fallen further in recent years, and app store reviewers increasingly flag poor onboarding as a reason for low ratings. Wherever possible, apps should deliver their core value to anonymous users first, and offer sign-in as an optional upgrade to a more personalised experience. Think of it as the commute test: can a user get what they need from your app in the time it takes to check their phone between stops? If a login wall is the first thing they see, the answer is almost certainly no.
TL:DR – Tuck your login page behind an AppBar action. Keep the main experience open and accessible. Sign-in should be an invitation, not a toll booth.
- Details
Read more: Wiring up an appBar action to a login page using Flutter
Build and publish a Flutter-based app for the App Store and Google Play — updated for 2026 to reflect the current Material 3 typography system.
When this article was first written, Flutter's TextTheme used naming conventions inherited from the 2018 Material Design guidelines, themselves a partial update on the 2014 spec. The sizes, weights, and spacing still largely reflected that older era. Since then, Flutter has completed its migration to Material 3 (also called Material You), and the typography system has been rebuilt from the ground up to match it.
TL:DR – Flutter's typography system has been substantially overhauled since this series began. The old headline1–headline6, bodyText1, bodyText2, subtitle1, subtitle2, caption, overline, and button style names are now fully deprecated and removed. The current TextTheme follows Material 3, with five semantic categories — Display, Headline, Title, Label, Body — each offering Large, Medium, and Small variants, giving you fifteen named styles in total. If your codebase still references headline1 or bodyText2, it will no longer compile without migration.
- Details
Build and publish a Flutter-based app for the App Store and Google Play — revisited and updated for 2026, where Material 3 is now the default design language and several APIs have changed significantly since this series began.
TL:DR — In this article we add Buttons, Floating Action Button, Chips, Data Table, Dialogs, List View, Popup Menu, and Navigation Drawer.
- Details
Build and publish a Flutter-based app for the App Store and Google Play — revisited and refreshed for 2026, now that Material 3 is firmly the default design language in Flutter.
TL:DR – n this article we add Progress indicators, Selection controls (Radio buttons, checkboxes and switches), SnackBar via ScaffoldMessenger, Bottom Navigation Bar, and Text fields — all updated to reflect current Flutter 3.x and Material 3 conventions.
- Details
A Beginner's Guide to Firebase Firestore for App Developers
Firebase Firestore is a flexible, scalable database built for mobile and web applications. It supports hierarchical data structures, expressive queries, realtime updates, offline support, and seamless integration with other Firebase and Google Cloud products. If you are building a mobile app and need a reliable cloud database, Firestore is an excellent choice.
This article walks you through the steps required to create a Firebase project, set up a Firebase Firestore database, add data, and read data from it.
TL:DR – This article goes through the setup steps required to get it going.
- Details
Build and publish a Flutter-based app for the App Store and Google Play — updated for 2026 to reflect the current state of both platforms.
Read carefully, and then read again. The decisions you make at this stage will follow your app for its entire lifecycle. Some things genuinely cannot be undone.
TL:DR – Sensible, consistent naming matters across every platform and tool you'll use. If you're managing more than one app or working with clients, you'll thank yourself later for getting this right from the start.
- Details
Read more: Setting up App Store Connect / Google Play for a new app
Build and publish a Flutter-based app for the App Store and Google Play — updated for 2026 with the current FlutterFire CLI approach.
There is a list of essential configuration steps to get Firebase working in your mobile app. The good news is that the process has been significantly streamlined since this series began. The old manual approach — editing Gradle files by hand, dragging .plist files around in Xcode — has largely been replaced by a dedicated CLI tool that handles the heavy lifting for you. Once completed, you won't need to revisit this setup again.
TL:DR – This article covers Firebase configuration, database setup, and project settings required to make your Flutter app work with Cloud Firestore. It has been updated to reflect the current FlutterFire CLI workflow, updated minimum SDK requirements, and the way Firebase projects are configured in 2026.
- Details
Build and publish a Flutter-based app for the App Store and Google Play — updated in 2026 to reflect the current Firebase and FlutterFire ecosystem.
TL:DR – The core appeal of Cloud Firestore hasn't changed: edit a document in the Firebase Console and you'll see it update on your device in real time. What has changed is how you wire everything together, with FlutterFire packages now fully stable, null safety baked in throughout, and the Firestore API meaningfully updated since the early days of this series.
- Details