Mobile Apps · MBC-23

Flutter Advanced

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.

Updated
From 12,150 THB / person 13,500 −10% excl. VAT 7% · group rates available
PDFDownload the course outline
  • Duration30 hours · 5 days
  • FormatOnsite / live online
  • Next roundOn request
  • CertificateIncluded

Course overview

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 1 Advanced 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 2 Architecture, 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 3 Local 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 4 Chat, 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 5 Device 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

For organisations — in-house / private

  • Tailor the content to your team’s tools and projects
  • Your dates, at your office or live online
  • Quotation with tax ID for procurement
Corporate training quote

Instructors

Frequently asked questions

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.