Mobile Apps · MBC-32

Core Flutter Programming

Core Flutter Programming is a hands-on course in building Android and iOS apps with Flutter and Dart, from modern Dart and Material 3 user interfaces to navigation with go_router, state management with Riverpod, REST APIs, testing and app builds. It suits developers from other languages, web developers and teams standardising on Flutter, and you leave with a complete sample food ordering app.

Updated
From 9,450 THB / person 10,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

Many organisations want mobile apps that run on both Android and iOS from a single team and a single codebase. Flutter has become a leading choice because it performs close to native and lets teams move quickly. Yet developers who are new to it tend to hit the same problems: an unstructured project, state scattered across the app until it is hard to change, and API calls written without a common pattern, so the app becomes harder to maintain as features grow.

This course walks learners through the core Flutter path in a single course. It starts with modern Dart 3.13, then covers widgets, layout and Material 3 theming on Flutter 3.47, navigation with go_router, state management with Riverpod 3 compared with Cubit/BLoC, REST API integration, local storage, testing and building the app. Everything is built on one project, the NovaBite food ordering app, which grows each day until it is complete. (5 days, 6 hours per day, 30 hours in total, Beginner to Intermediate level.)

What you’ll gain

  • Write modern Dart correctly, including null safety, records, patterns, sealed classes and asynchronous programming
  • Understand how widgets, elements and rendering work in Flutter and write efficient UI code
  • Design responsive screens and manage themes following Material 3, with light and dark modes
  • Handle navigation in multi-screen apps with go_router, including redirects based on sign-in state
  • Build forms that validate user input correctly and are easy to use
  • Manage state with Riverpod 3 and choose Cubit/BLoC where it suits the team and project better
  • Connect to REST APIs, map JSON to models and store data on the device in a structured way
  • Write basic unit and widget tests, build the app for Android and understand the iOS build steps

Who this course is for

  • Software developers who want to start building mobile apps with Flutter in a structured way
  • Web developers who want to extend their skills to cross-platform mobile development
  • Native Android or iOS developers who want to cut the cost of building for several platforms
  • Development teams whose organisation has chosen Flutter as the standard for new projects and who want a shared foundation
  • Anyone who wants to learn Flutter from the basics to real-world use in one continuous course

Prerequisites

  • Programming experience in at least one language, such as JavaScript/TypeScript, Java, Kotlin, C# or Python
  • A basic grasp of object-oriented programming, such as classes, objects and inheritance
  • A basic understanding of REST APIs and JSON, and the ability to use Git and VS Code or Android Studio
  • No prior Dart or Flutter experience is needed; Day 1 covers Dart fully before moving on to Flutter

Curriculum

Course Details

This course brings the core Flutter path, which the institute also teaches separately as Flutter for Beginners, Flutter Intermediate and Flutter Advanced, into one 5-day course for learners who want to go continuously from the Dart language to building the app. It runs for 5 days, 6 hours per day (30 hours in total, 09:00-16:00), as a continuous workshop on a single project, the NovaBite food ordering app, using generated data and

a mock REST API that runs with Docker on the learner's own laptop. The content is based on Flutter 3.47 and Dart 3.13, the current stable releases, and follows the latest stable versions on the training day. Building for iOS needs a Mac with Xcode, so the iOS steps are demonstrated in class. Learners take home daily lab guides and the full source code of every workshop to use as a starting point for their own projects.

Day 1 Modern Dart Essentials

Section 1: Setting Up the Tools and a Flutter Overview

  • Install the Flutter SDK, check it with flutter doctor and set up an Android emulator or a real device
  • Flutter's architecture: the framework, the engine and the Impeller renderer
  • Project structure, the pubspec.yaml file and adding packages from pub.dev
  • Lab: create a first project, run it on the emulator and try hot reload

Section 2: Dart Fundamentals and Null Safety

  • Variables, type inference, final and const
  • Sound null safety and the ?, !, ?? and ?. operators
  • Functions, named and optional parameters, and collections (List, Set, Map) with collection if/for
  • Lab: write a Dart program that manages menu items and prices without null risks

Section 3: Object-Oriented Programming in Dart

  • Classes, constructors, factory constructors and the primary constructors introduced in Dart 3.13
  • Inheritance, mixins, abstract classes and interfaces
  • Class modifiers (sealed, final, base, interface) and extension methods
  • Lab: design menu and food category classes with primary constructors

Section 4: Records, Patterns and Sealed Classes

  • Records for returning several values from a function
  • Pattern matching with switch expressions and destructuring
  • Exhaustiveness checking with sealed classes, and dot shorthands
  • Lab: model order status with a sealed class and a switch expression

Section 5: Workshop Day 1: Async Code and the NovaBite Domain Model

  • Future, async and await for work that has to wait for a result
  • Stream and StreamController for data that changes over time
  • Handling errors with try/catch in asynchronous code
  • Workshop: build MenuItem, CartItem and Order, calculate totals, discounts and tax, and simulate loading the menu asynchronously
Day 2 Flutter Widgets, Layout and Material 3 Theming

Section 6: Widgets and Rendering

  • How widgets, elements and render objects relate to each other
  • StatelessWidget and StatefulWidget, and their lifecycle
  • BuildContext and using const widgets to reduce rebuilds
  • Lab: split a screen into small reusable widgets

Section 7: Common Layout Widgets

  • Container, Padding, Row, Column, Stack and Expanded/Flexible
  • ListView, GridView and CustomScrollView with slivers
  • Reading constraints and fixing overflow problems
  • Lab: lay out food menu cards and fix the most common overflow errors

Section 8: Responsive and Adaptive Design

  • MediaQuery and LayoutBuilder
  • Designing for both phones and tablets
  • Adaptive widgets that suit Android and iOS
  • Lab: make the menu screen switch between a list and a grid by screen size

Section 9: Material 3 and Theming

  • Material 3 colour schemes, typography and components
  • Light and dark modes and a custom brand theme
  • The material_ui and cupertino_ui packages now published separately from the SDK, and how to migrate to them
  • Lab: build the NovaBite brand theme with light and dark modes

Section 10: Workshop Day 2: Menu and Food Detail Screens

  • Hot reload, hot restart and Widget Previews for building widgets in isolation
  • Flutter DevTools and the Widget Inspector for checking screen structure
  • Workshop: build the menu screen grouped by food category and the food detail screen
  • Workshop: check screens across sizes and both colour modes with Widget Previews
Day 3 Navigation, Forms and User Input

Section 11: Navigation Basics

  • Navigator, routes and passing data between screens
  • Returning a result from the destination screen
  • The limits of imperative navigation as an app grows
  • Lab: open the food detail screen from the menu list and pass data to it

Section 12: go_router for Real Apps

  • Defining routes, path parameters and query parameters
  • Nested routes and ShellRoute for bottom navigation
  • Redirects based on sign-in state, and basic deep links
  • Lab: define every route of the app with go_router

Section 13: Forms and Validation

  • Form, TextFormField and GlobalKey
  • Validation rules and error messages that users understand
  • Managing focus and the keyboard on mobile
  • Lab: build a sign-up form with validation on every field

Section 14: Interacting with Users

  • Dialogs, bottom sheets and snack bars
  • Basic gestures such as tap, long press and swipe to delete
  • Implicit animations and Hero animations
  • Lab: add a bottom sheet for food options and a Hero animation for menu images

Section 15: Workshop Day 3: NovaBite Routes and Sign-in

  • Set up four-tab bottom navigation (menu, cart, orders and profile) with ShellRoute
  • Build the sign-up and sign-in screens with validation
  • Redirect to the sign-in screen when the user is not signed in
  • Workshop: test every flow on the emulator and fix anything awkward to use
Day 4 State Management with Riverpod and REST APIs

Section 16: State Management Concepts

  • Ephemeral state and app state
  • The limits of setState and InheritedWidget as an app grows
  • An overview of popular state management approaches in Flutter
  • Lab: decide which NovaBite state belongs to a screen and which belongs to the app

Section 17: Riverpod 3

  • ProviderScope, providers and ref (watch, read, listen)
  • Notifier and AsyncNotifier for state with logic
  • Code generation with riverpod_annotation, provider lifecycle and families
  • Lab: move the cart state into a Notifier

Section 18: Riverpod Compared with Cubit/BLoC

  • How Cubit and BLoC work (states and events)
  • Strengths and limits of each approach
  • Choosing an approach to suit team size and project
  • Lab: write the cart as a Cubit and compare the code with Riverpod

Section 19: Connecting to REST APIs

  • HTTP calls with dio (GET, POST, PUT, DELETE)
  • Mapping JSON to models with json_serializable
  • Interceptors for attaching tokens and handling errors
  • The repository pattern to separate the data layer from the UI
  • Lab: load the menu from the mock REST API through a repository

Section 20: Workshop Day 4: The Cart and Menu Data from the API

  • Show the menu from the API through an AsyncNotifier with loading and error states
  • Manage the cart and user state with Riverpod
  • Send orders back to the API and show the result to the user
  • Workshop: cut the API connection and improve the messages and retry button until they work well
Day 5 Local Storage, Testing, Release and Master Workshop

Section 21: Local Storage

  • shared_preferences for settings and tokens
  • SQLite with sqflite or drift for structured data
  • Offline-first ideas and caching API data
  • Lab: save order history to SQLite so it can be viewed without an internet connection

Section 22: Testing Basics

  • Unit tests for business logic and notifiers
  • Widget tests and overriding providers in tests
  • Mocking repositories with mocktail
  • Lab: write tests for the price calculation and the cart screen

Section 23: App Quality and Performance

  • Lints and dart fix to keep code to standard
  • Checking performance and finding unnecessary rebuilds with DevTools
  • Managing app assets, fonts and icons
  • Lab: use DevTools to find and fix a screen that stutters while scrolling

Section 24: Building and Preparing for Release

  • Setting the app name, package name and version
  • Building an APK and an App Bundle for Android
  • An overview of iOS builds and the Xcode and Apple Developer Program requirements (demonstration)
  • The idea of flavours for separate development and production environments
  • Lab: build an APK and install it on a real Android phone or the emulator

Section 25: Master Workshop: A Ready-to-use NovaBite App

  • Store the token and settings on the device and add an offline order history screen
  • Write unit and widget tests for the key parts of the app
  • Test what happens when the API is down or the network is slow, and adjust the UI to match
  • Build the app, install it on a device, present the result and review the code structure together

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 does this course differ from Flutter for Beginners, Flutter Intermediate and Flutter Advanced?

Those three courses are taken level by level, which suits learners who only want a particular stage. Core Flutter Programming brings the core path into one 5-day course: the Dart language, widgets and Material 3, go_router, Riverpod 3 compared with Cubit/BLoC, REST APIs, local storage, testing and building the app, all on a single NovaBite project that grows each day. Advanced topics such as platform channels, push notifications and mobile CI/CD are covered as concepts only.

Do I need to know Dart or have used Flutter before?

No. Day 1 covers the Dart language fully before moving on to Flutter. You should already be able to program in another language, understand basic OOP and have a basic grasp of REST APIs and JSON.

What laptop do I need, and can I use Windows?

Windows, macOS or Linux all work. A laptop with at least 16 GB of RAM and 30 GB of free space is recommended because the Android emulator is resource hungry. Install the Flutter SDK, Android Studio, VS Code and Docker Desktop (for the mock API) beforehand. An Android phone with a USB cable lets you test on a real device.

Will we build the app for iOS in class?

Building for iOS needs a Mac with Xcode. The steps and the Apple Developer Program requirements are demonstrated in class, and learners with a Mac can run the app on the iOS Simulator themselves. Publishing to the App Store or Google Play needs your own or your organisation's developer account.

Why does the course focus on Riverpod, and is BLoC covered?

The course uses Riverpod 3 as its main approach because it scales from small to large apps and is easy to test. A dedicated section compares it with Cubit/BLoC, including a lab that rewrites the cart as a Cubit, so teams can see the difference and choose their own standard.

Which Flutter and Dart versions does the course use?

The course is based on Flutter 3.47 and Dart 3.13, the current stable releases, including primary constructors, Widget Previews and the material_ui and cupertino_ui packages published separately from the SDK. Flutter releases regularly, so the content follows the latest stable version on the training day.