# ChangeNotifier và ListenableBuilder

> Ba ViewModel từ mỏng tới dày, ListenableBuilder nối View không cần thư viện ngoài, và dispose() đóng cả một lớp bug.

- URL: https://dantech.academy/courses/flutter-mobile-101/03-mvvm/lesson-03-viewmodel-with-changenotifier
- Khóa học: [Flutter Mobile 101](https://dantech.academy/courses/flutter-mobile-101.md)
- Module: MVVM
- Thời lượng: 22 phút
- Độ khó: beginner
- Truy cập: Dành cho học viên

## Mục tiêu

- Đọc được ViewModel extends ChangeNotifier: nhận dependency qua constructor, expose getter, notifyListeners
- Nối View vào ViewModel bằng ListenableBuilder, không dùng thư viện ngoài
- Giải thích vì sao ViewModel sống theo màn làm bug timer sống sót trở thành bất khả thi

## Nội dung bài học

1. ViewModel Mỏng Nhất
2. Nối View: ListenableBuilder
3. Ai Tạo ViewModel, Ai Dọn Dẹp Nó
4. Vì Sao dispose() Không Phải Thủ Tục
5. GameViewModel: Bảy Dependency, Và Vì Sao
6. Trước Và Sau
7. Vấn Đề Còn Lại: Prop Drilling

## Học cùng AI agent

Toàn bộ bài học dành cho học viên của khóa. Học viên mở bài trên web và bấm nút **Markdown** để copy toàn bài, rồi dán vào Claude, ChatGPT, Cursor hoặc agent bạn đang dùng. Nhanh hơn: tạo token ở `/profile/ai-agents` và agent đọc bài trực tiếp qua MCP.

- [Đăng ký khóa học](https://dantech.academy/flutter-mobile-101/checkout)

---

- Bài trước: [Immutable model và sealed class](https://dantech.academy/courses/flutter-mobile-101/03-mvvm/lesson-02-model-and-ui-state.md)
- Bài tiếp theo: [Provider, MultiProvider và context.watch](https://dantech.academy/courses/flutter-mobile-101/04-provider-di/lesson-01-provider-package-basics.md)
