Mobile Programming (PRM393)
Vietnamese title: Lập trình di động
Credits: 3
Prerequisites: PRO192

Description:
1. Understand the fundamental concepts of mobile programming with Flutter and Dart.
2. Experience using popular widgets and plugins to build cross-platform user interfaces.
3. Knowledge of state management, form handling, and navigation between screens in mobile applications.
4. Learn and apply asynchronous programming techniques with Future and async/await.
5. Ability to integrate RESTful APIs to exchange data between mobile applications and servers, as well as store data locally using SharedPreferences and SQLite.
6. Proficient in using Dart libraries and command-line tools to optimize the application development process.
7. Knowledge of implementing mobile notification systems, including local and push notifications.

Learning outcomes:
Understand the fundamental concepts of mobile programming with Flutter and Dart.
Experience using popular widgets and plugins to build cross-platform user interfaces.
Knowledge of state management, form handling, and navigation between screens in mobile applications.
Learn and apply asynchronous programming techniques with Future and async/await.
Ability to integrate RESTful APIs to exchange data between mobile applications and servers, as well as store data locally using SharedPreferences and SQLite.
Proficient in using Dart libraries and command-line tools to optimize the application development process.
Knowledge of implementing mobile notification systems, including local and push notifications.

Student tasks:
- Students must attend more than 80% of contact sessions in order to be accepted to the final examination.
- Student is responsible to do all assigned exercises given by instructor in class or at home and submit on time
- Use laptop in class only for learning purpose
- Promptly access to the FU LMS at http://lms.fpt.edu.vn for up-to-date course information

Tools:
- Android Studio + Flutter SDK + Dart SDK (Latest Version)
- Virtual device attached android studio (or other virtual device), android mobile (only for learning, not for exam - optional)
- Laptop: 16GB RAM, 25GB free space before installing studio
Note:
- Install all neccessary tools before the first slot of the course

Materials:
description: Mastering Flutter: Learn to Develop Flutter Apps for iOS, Android, Desktop and Web
author: Kevin Moore
publisher: BPB Publications
published_date: 2025
edition: 1st
isbn: 9789365899177
description: Beginning App Development with Flutter: Create Cross-Platform Mobile Apps
author: Rap Payne
publisher: Apress
published_date: 2019
edition: 1st
isbn: 9781484251805
description: Developing Mobile Apps with Flutter Specialization
author: IBM Skills Network Team
publisher: Coursera
note: https://www.coursera.org/specializations/developing-mobile-apps-with-flutter
description: E-learning Platforms
note: https://flutter.dev https://docs.flutter.dev https://dart.dev/guides/language/language-tour https://github.com/flutter/samples

Assessments:
category: Practical Exam
type: on-going
weight: 25.0
duration: 90'/each
question_type: All CLOs
no_question: Write a program
knowledge_and_skill: By instructor, in class
grading_guide: studied chapters knowledge and skills
note: Students prepare personal computer with Android studio and virtual machines installed. The exam proctor will monitor and grade exam directly in the exam room.
category: Progress Test
type: on-going
weight: 15.0
duration: Option 1: 30'; Option 2 (For Constructivism Approach only): Follow lecturer's proposal
question_type: PT1: CLO1, CLO2, CLO3;
PT2: CLO3, CLO4, CLO5;
PT3: CLO5 CLO6,CLO7
no_question: Option 1: Multi-choice
Option 2 (For Constructivism Approach only): Follow lecturer's proposal
knowledge_and_skill: Option 1:25;
Option 2 (For Constructivism Approach only): Follow lecturer's proposal
grading_guide: studied chapters knowledge and skills
note: by instructor
category: Project
type: on-going
weight: 30.0
duration: Option 1: At home; Option 2 (For Constructivism Approach only): Follow lecturer's proposal
question_type: All CLOs
no_question: Option 1: N/A; Option 2 (For Constructivism Approach only): Follow lecturer's proposal
knowledge_and_skill: Option 1: N/A; Option 2 (For Constructivism Approach only): Follow lecturer's proposal
grading_guide: All chapters; knowledge and skills of mobile programming
note: by instructor
category: Final exam
type: Final exam
weight: 30.0
duration: 60'
question_type: All CLOs
no_question: Multi-Choice
knowledge_and_skill: 50
grading_guide: All chapters; knowledge and skills of mobile programming
note: by exam board

Schedule:
session: Flutter Overview & Environment Setup
learning_outcomes: ITU
materials: PRM393
session: Project Structure & Tooling
learning_outcomes: TU
session: Hot Reload/Restart & Widget Tree
learning_outcomes: TU
session: Basic UI Composition with Scaffold
learning_outcomes: TU
session: Summary & Setup Issues
learning_outcomes: TU
session: Dart Types & Variables
learning_outcomes: TU
session: Functions & Functional Patterns
learning_outcomes: TU
session: Classes & Constructors
learning_outcomes: TU
session: Collections & Operations
learning_outcomes: TU
session: Intro to Futures & Async
learning_outcomes: TU
session: Future-based Async Programming
learning_outcomes: TU
session: Streams & StreamController
learning_outcomes: TU
session: StreamBuilder in Flutter
learning_outcomes: TU
session: Repository Pattern
learning_outcomes: TU
session: Reactive Patterns (Concept)
learning_outcomes: TU
session: Progress Test 1
learning_outcomes: U
session: UI Basics – Scaffold Layout
ListView & Card/ListTile
learning_outcomes: TU
session: Interactive Widgets
learning_outcomes: TU
session: Pickers – Date/Time
learning_outcomes: TU
session: Theming & UI Polishing
learning_outcomes: TU
session: Navigator 1.0 – Push/Pop
learning_outcomes: TU
session: Named Routes & Arguments
learning_outcomes: TU
session: Navigator 2.0 Concepts
learning_outcomes: TU
session: Android Deep Linking
learning_outcomes: TU
session: iOS URL Scheme Navigation
learning_outcomes: TU
session: Flex Layout (Row/Column)
learning_outcomes: TU
session: GridView & Stack
learning_outcomes: TU
session: LayoutBuilder & MediaQuery
learning_outcomes: TU
session: Responsive UI Design
learning_outcomes: TU
session: Responsive Refactor
learning_outcomes: TU
session: Progress Test 2
learning_outcomes: U
session: Forms & Controllers
Validation & Errors
learning_outcomes: TU
session: Submit Flow & Data
learning_outcomes: TU
session: Form Draft Save
learning_outcomes: TU
session: Focus & Keyboard Actions
learning_outcomes: TU
session: HTTP Request & JSON Parsing
learning_outcomes: TU
session: FutureBuilder & List Rendering
learning_outcomes: TU
session: Error/Loading UI
learning_outcomes: TU
session: Detail Screen via API ID
learning_outcomes: TU
session: Retry & Caching
learning_outcomes: TU
session: SharedPreferences Basics
learning_outcomes: TU
session: Local DB (SQLite/Hive)
learning_outcomes: TU
session: Persistent List Rendering
learning_outcomes: TU
session: Sync-Up Concept
learning_outcomes: TU
session: Export/Backup JSON
learning_outcomes: TU
session: Login Form & Mock Auth
learning_outcomes: TU
session: Session State Management
learning_outcomes: TU
session: Guarded Routes
learning_outcomes: TU
session: Token Persistence (Mock)
learning_outcomes: TU
session: Integrated Auth Flow
learning_outcomes: TU
session: Unit Tests for Project Features
learning_outcomes: TU
session: Widget Tests & Debugging
learning_outcomes: TU
session: Progress Test 3
learning_outcomes: U
session: Sprint 3 Review
Refactoring & Polishing
learning_outcomes: TU
session: User Testing & Report
learning_outcomes: TU
session: Build & Release Config
learning_outcomes: TU
session: Packaging & Release Build
learning_outcomes: TU
session: Presentation Rehearsal
learning_outcomes: TU
session: Mock Defense
learning_outcomes: TU
session: Final Project Submission
learning_outcomes: U