# SharedPreferencesAsync và repository pattern

> Seam KeyValueStore, adapter SharedPreferencesAsync, JSON codec có số version, và repository làm nguồn sự thật với bốn nhánh đọc fail-soft.

- URL: https://dantech.academy/courses/flutter-mobile-101/06-full-app/lesson-01-local-persistence-repository
- Khóa học: [Flutter Mobile 101](https://dantech.academy/courses/flutter-mobile-101.md)
- Module: Ráp App Hoàn Chỉnh
- Thời lượng: 26 phút
- Độ khó: beginner
- Truy cập: Dành cho học viên

## Mục tiêu

- Đọc được một tầng lưu trữ bốn lớp và giải thích vai trò từng lớp
- Xử lý đủ bốn kết quả của một lần đọc, kể cả trường hợp dữ liệu do bản app mới hơn ghi
- Giải thích triết lý fail-soft: không bao giờ ném lỗi ra ngoài tầng lưu trữ

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

1. Cài Đặt
2. Bốn Lớp, Đi Từ Trong Ra Ngoài
3. KeyValueStore: Một Interface Hai Method
4. StatsDocument Và Số version
5. Bốn Kết Quả Của Một Lần Đọc
6. Ghi Hỏng Thì Sao
7. Seed Lần Đầu
8. Repository Là Source Of Truth
9. Test Vẫn Xanh

## 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: [ViewModel scope và shared repository](https://dantech.academy/courses/flutter-mobile-101/05-navigation/lesson-03-where-state-lives.md)
- Bài tiếp theo: [main(), runApp và ráp toàn bộ app](https://dantech.academy/courses/flutter-mobile-101/06-full-app/lesson-02-assemble-the-app.md)
