Flutter Advanced is a course that builds on intermediate skills with topics used in real projects, from Material 3 and Cupertino interfaces and multilingual apps to MVVM with Bloc, testing, SQLite and Firebase, a real-time chat app and store release. It suits developers who already write Flutter or have completed an intermediate Flutter course.
Once you can write Flutter, the next challenge is building apps that hold up in real organisational use. That means code that is easy to maintain, systematic state management, multiple languages, data stored both on the device and in the cloud, notifications and access to device features. Many examples online still follow Flutter 2 and early Flutter 3 practice, such as old-style MVC, hand-written JSON translations or manual Firebase setup, which makes them hard to apply to current projects.
This new edition is updated for Flutter 3.47 and Dart 3.13 and builds on intermediate skills with topics used in real projects: advanced Material 3, iOS-style apps with Cupertino, multilingual apps with gen-l10n, MVVM architecture following the Flutter architecture guide, state management with Bloc, testing, SQLite, image uploads to a REST API, user accounts with Cloud Firestore, a real-time chat app, push notifications, audio and video, device APIs, and building and publishing apps to the stores. (5 days, 6 hours per day, 30 hours in total, Advanced level.)
What you’ll gain
Build advanced UIs with Material 3, animations and iOS-style apps with Cupertino
Build multilingual apps with gen-l10n and ARB files
Structure apps with MVVM and manage state with Bloc and Cubit
Write unit, widget and integration tests for an app
Store data locally with SQLite and upload images to a REST API
Use Firebase Authentication, Cloud Firestore and Cloud Storage to build a real-time chat app
Send push notifications with Firebase Cloud Messaging and work with audio, video and device APIs
Tune performance and build and publish apps to Google Play and the App Store
Who this course is for
Developers who have completed intermediate Flutter or already write Flutter and want to build production apps
Students and project teams whose mobile apps must connect to a backend and the cloud
Teachers, lecturers and trainers who teach Flutter and need current advanced content
IT staff and development teams who maintain an organisation's Flutter apps
Prerequisites
Some Flutter experience, or completion of an intermediate Flutter course
Dart basics such as classes, async code and null safety
No Swift, Kotlin or Java experience is needed
A Google account for creating a Firebase project and a laptop that can run Flutter
Curriculum
Course Details
This course is a 2026 edition that replaces the previous Flutter 3 Advanced course. It has been rewritten for Flutter 3.47 and Dart 3.13. It runs for 5 days, 6 hours per day (30 hours in total, 09:00-16:00), as lectures alternating with labs and workshops throughout. Advanced level, building on Flutter for Beginners and intermediate Flutter. Learners structure apps with MVVM, manage state with Bloc, build multilingual apps, write tests, store data with SQLite and Firebase, build a real-time chat app with push notifications, use device APIs, tune performance and build apps for store release. They take home a lab guide and source code for every workshop.
Day 1Advanced UI and Multilingual Apps
Section 1: Lab: Advanced Dart 3 and Project Setup
Review Flutter 3.47 and Dart 3.13, and what has changed since early Flutter 3
Records, pattern matching, sealed classes and switch expressions
Extension methods and extension types for readable code
Configure lints and flutter analyze to keep team code quality high
Lab: refactor older code to use Dart 3 features
Section 2: Lab: Advanced Material 3 and Animation
Build themes with ColorScheme.fromSeed and ThemeExtension for brand colours
NavigationBar, NavigationRail and layouts that adapt to screen size
Shapes, cards and components customised to the app's identity
Implicit animations, Hero and AnimatedSwitcher for smooth transitions
Lab: a product catalogue with a backdrop menu and animations
Section 3: Lab: iOS-Style Apps with Cupertino
CupertinoApp, CupertinoTabScaffold and a three-tab app structure
Product lists, search and customer details forms in Cupertino style
CupertinoDatePicker, action sheets and iOS-style dialogs
Adaptive widgets that render to match the platform automatically
Lab: an iOS-style shop app with a cart
Section 4: Lab: Multilingual Apps with gen-l10n
Set up flutter_localizations, intl and the l10n.yaml file
Write Thai and English strings in ARB files with placeholders and plurals
Use the generated AppLocalizations in the UI instead of a hand-written delegate
Format dates, numbers and currency per locale
Lab: let users switch language and remember their choice on the device
Day 2Architecture, State and Testing
Section 5: Lab: MVVM App Architecture
Why layers matter, and the problems of putting everything in widgets
Split the UI layer and data layer following the Flutter architecture guide
The roles of views, view models, repositories and services
Simple dependency injection and feature-based folders
Lab: refactor a sample app from an old MVC structure to MVVM
Section 6: Lab: State Management with Bloc and Cubit
Bloc concepts: events, states and transitions
Cubit for simple state, and Bloc when events need tracking
BlocProvider, BlocBuilder, BlocListener and BlocConsumer
Model state with sealed classes and handle loading, success and error
Lab: a product list with filters driven by Bloc
Section 7: Lab: Advanced Navigation with go_router
Declarative routes with path and query parameters
ShellRoute for apps with a persistent bottom navigation bar
Redirects that require login before protected screens
Deep link support on Android and iOS
Section 8: Lab: Testing Flutter Apps
Unit tests for repositories and view models
Mock dependencies with mocktail
Test Blocs and Cubits with bloc_test
Widget tests and integration tests that run on a device
Lab: test every layer of the product list screen
Day 3Local Data, REST APIs and Firebase
Section 9: Lab: Local Databases with SQLite
Install sqflite and path, then open the database with openDatabase
Create models with toMap and fromMap
Write a repository to insert, query, update and delete data
Upgrade the table schema when a new app version ships
Lab: an expense tracker that works offline
Section 10: Lab: Uploading Images to a REST API
Pick images from the camera or gallery with image_picker and resize them before sending
Prepare a Laravel backend REST API that accepts image files
Send multipart uploads with a token and show progress
Handle errors, timeouts and retries
Lab: a profile editing screen with a photo change
Section 11: Lab: Firebase Setup and User Accounts
Create a Firebase project and connect the app with the FlutterFire CLI (flutterfire configure)
Initialise Firebase with DefaultFirebaseOptions on Android and iOS
Register, sign in and sign out with Firebase Authentication
Listen to the auth state stream and route users accordingly
Lab: login and sign-up screens with loading and error messages
Section 12: Lab: CRUD with Cloud Firestore
Data modelling with collections and documents
Create, read, update and delete data in Cloud Firestore
Listen in real time with snapshots and render with StreamBuilder
Queries, ordering and pagination
Write security rules so signed-in users reach only their own data
Day 4Chat, Notifications and Media
Section 13: Workshop: A Real-Time Chat App
An auth form and extra user data stored in Firestore
Send messages, order them by time and listen for new ones in real time
Build chat bubbles showing the sender's name and time
Set security rules for chat rooms
Workshop: test the chat on several devices at once
Section 14: Lab: Image Uploads with Cloud Storage for Firebase
Pick images and check file type and size before upload
Upload files to Cloud Storage and track progress
Store image URLs in Firestore and display them with caching
Storage security rules, and testing on a real iOS device
Lab: send images in the chat
Section 15: Lab: Push Notifications with Firebase Cloud Messaging
Install firebase_messaging and configure Android and iOS, including APNs
Request notification permission on recent Android versions and iOS
Handle messages in the foreground, background and terminated states
Show notifications while the app is open with flutter_local_notifications
Lab: send notifications from the Firebase Console and open the related screen on tap
Section 16: Lab: Audio and Video in Apps
Request microphone permission and record audio with a pub.dev package
Play, pause, seek and set the volume
Play video with video_player and custom controls
Embed YouTube videos and respect the platform's terms of use
Lab: send voice messages in the chat
Day 5Device APIs, Performance and Store Release
Section 17: Lab: Using Device Capabilities
Handle permissions consistently with permission_handler
Location with geolocator and sensors with sensors_plus
Fingerprint or face unlock with local_auth
Open links, email and calls with url_launcher, and show web pages with webview_flutter
An overview of Bluetooth and NFC plugins and their platform limits
Section 18: Lab: Performance and Debugging
Measure with Flutter DevTools: performance, CPU profiler and memory
Cut rebuilds with const and smaller widgets
Handle images, caching and long lists efficiently
Shrink the app and inspect it with the app size tool
Lab: find and fix the jank in a sample app
Section 19: Building and Publishing to the Stores
Separate settings per environment with flavors and dart-define
Set the app name, icon, splash screen and version number
Sign and build an App Bundle for Google Play
Archive the iOS app, test through TestFlight and submit via App Store Connect
Track crashes after release with Firebase Crashlytics
Section 20: Workshop: An End-to-End Capstone App
Design an app for your chosen brief with MVVM and Bloc
Connect Firebase, SQLite and a REST API as the brief requires
Add multiple languages, notifications and tests for the key parts
Present your work, review the code together and plan next steps
Schedule & training options
For individuals — public rounds
No public rounds are open right now. Join the waiting list and we will contact you first when the next round opens, or ask us on LINE. Or call 02-570-8449 or 088-807-9770
How do you store data with SQLite in a Flutter app?
Add the sqflite and path packages with flutter pub add, then create a model class that converts to and from a map with toMap and fromMap. Next, write a repository that opens the database with openDatabase, creates tables in onCreate and provides insert, query, update and delete methods. When a new app version ships, change the schema in onUpgrade. Call the repository through a view model or Bloc rather than directly from the screen. The data lives on the device, so it works without an internet connection.
How do you make a Flutter app support multiple languages?
The current approach is Flutter's built-in gen-l10n tool. Add flutter_localizations and intl to pubspec.yaml, enable generate and create an l10n.yaml file. Then write strings in an ARB file per language, such as app_en.arb and app_th.arb, and Flutter generates an AppLocalizations class for you. Pass its localizationsDelegates and supportedLocales to MaterialApp and read strings through AppLocalizations.of(context). If users can switch language themselves, save their choice on the device for next time.
How do you show real-time Cloud Firestore data with StreamBuilder?
Cloud Firestore can deliver data as a stream through snapshots(), for example FirebaseFirestore.instance.collection('messages').orderBy('createdAt').snapshots(). Pass that stream to a StreamBuilder and build a ListView from the documents in each snapshot. Whenever data is added, changed or deleted, the screen updates itself without fetching again, which is the same principle as the real-time chat app in this course. Set up the project with flutterfire configure first, and write security rules so only signed-in users can read and write.
Who is the Flutter Advanced course for, and what should I know beforehand?
It suits developers who already write Flutter or have completed an intermediate Flutter course, students whose app projects must connect to a backend and the cloud, teachers who teach Flutter and teams that maintain an organisation's apps. You should know Dart basics such as classes, async code and null safety. No Swift, Kotlin or Java experience is needed, and you should have a Google account for creating a Firebase project.
What will I be able to do after the Flutter Advanced course?
You will be able to design interfaces with Material 3 and Cupertino, build multilingual apps with gen-l10n, structure apps with MVVM, manage state with Bloc, use go_router, write tests, store data in SQLite, upload images to a REST API, build user accounts and CRUD on Cloud Firestore, create a real-time chat app with image sharing and push notifications, use device APIs, tune performance and publish apps to the stores. Participants who complete the training receive a Certificate of Completion with its own number, which can be verified online.
Can the Flutter Advanced course be run in-house for our team?
Yes. This course can be run in-house for your team, with examples adapted to your work, such as applying MVVM and Bloc to features of the app your team is building. You can request a quotation from this page or contact us on LINE @itgenius or by phone on 02-570-8449.
Sales and online marketing produce new data every day: sales by product, sales by channel, advertising spend and how many visitors become buyers. That data only helps decisions when it is shown as charts that answer the right question. Many people can create…
Reports that must be updated every week or month often eat up time copying data, rebuilding summary tables and redrawing charts, while managers still have to open several sheets to see the big picture. A dashboard brings the key figures, charts and filters…
Flutter is a popular framework for building apps from a single codebase that runs on Android, iOS, the web and desktop, and every part of a Flutter app, from the screens to the business logic, is written in Dart. People who skip Dart and jump straight into…