Một ứng dụng tốt là ứng dụng vẫn hoạt động (một phần) ngay cả khi mất mạng. Để làm được điều đó, bạn cần biết cách lưu trữ dữ liệu ngay trên thiết bị của người dùng (Local Storage).
Nhưng giữa ma trận: SharedPreferences, SQLite, Hive, Drift…, bạn nên chọn cái nào? Bài viết này sẽ giúp bạn chọn đúng công cụ cho đúng việc.
| Công cụ |
Loại dữ liệu |
Thích hợp cho |
Tốc độ |
| SharedPreferences |
Key-Value đơn giản |
Cài đặt App, Token đăng nhập |
Cực nhanh |
| SQLite (sqflite) |
Có cấu trúc (Table) |
Danh sách sản phẩm, Tin nhắn |
Nhanh |
| Hive |
NoSQL |
Dữ liệu lớn cần tốc độ cao |
Siêu nhanh |
1. SharedPreferences: Két sắt mini
Hãy tưởng tượng SharedPreferences giống như một tập file ghi chú nhỏ. Bạn dùng nó để lưu những thông tin đơn giản như: “User này có thích giao diện tối không?”, “Token đăng nhập là gì?”.
Cách dùng:
Đừng lạm dụng nó để lưu cả một danh sách 1000 sản phẩm nhé! Nó sẽ làm App bạn chậm rì đấy.
// Lưu dữ liệu
final prefs = await SharedPreferences.getInstance();
await prefs.setBool('isDarkMode', true);
// Lấy dữ liệu
final isDark = prefs.getBool('isDarkMode') ?? false;
2. SQLite: Kho hàng khổng lồ
Khi dữ liệu của bạn phức tạp hơn, có mối quan hệ (như Bài viết có nhiều Comment), bạn cần một Database thực thụ. SQLite là một cơ sở dữ liệu quan hệ (RDBMS) nhỏ gọn nằm ngay trong điện thoại.

Chúng ta thường dùng thư viện sqflite. Tuy code hơi dài dòng (phải viết câu lệnh SQL thủ công) nhưng nó cực kỳ mạnh mẽ.
// Tạo bảng
await db.execute(
'CREATE TABLE dogs(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)',
);
// Thêm dữ liệu
await db.insert(
'dogs',
{'id': 1, 'name': 'Milu', 'age': 2},
conflictAlgorithm: ConflictAlgorithm.replace,
);
3. Bảng so sánh chiến lược
Khi nào dùng súng lục, khi nào dùng đại bác? Bảng dưới đây sẽ giúp bạn quyết định nhanh.

Lời khuyên:
– Nếu chỉ lưu Cài đặt, Token: Dùng SharedPreferences.
– Nếu lưu Danh sách Todo, Giỏ hàng offline: Dùng SQLite (hoặc Drift nếu lười viết SQL).
– Nếu cần Siêu tốc độ & đơn giản: Thử ngay Hive (NoSQL).
Dữ liệu đã có, nhưng làm sao hiển thị hình ảnh từ Camera hay cho người dùng chọn avatar từ thư viện ảnh? Khó đấy, nhưng Flutter làm nó trở nên dễ dàng.
Bài tiếp theo: Xử lý ảnh & media trong Flutter (Camera, Image Picker).
👉 Hướng dẫn chụp ảnh và chọn ảnh từ thư viện trong Flutter
💡 Bạn muốn học cách xây dựng Offline-First App, tự động đồng bộ khi có mạng?
Kiến trúc này được mổ xẻ chi tiết trong: Khóa học Lập trình Flutter Thực chiến