Bài viết gần đây
| Lưu trữ local trong Flutter: SharedPreferences & SQLite để App chạy Offline
Được viết bởi thanhdt vào ngày 28/01/2026 lúc 07:29 | 110 lượt xem
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
Weekly Digest — Nhận Bản Tin Hàng Tuần
Nhận các bài viết phân tích kỹ thuật chuyên sâu, thuật toán giao dịch tự động (Trading Bot) và các giải pháp công nghệ mới nhất từ Hướng Nghiệp Dữ Liệu.
Thành ĐT
Founder & Chief Technology Officer, HNDLChuyên gia với hơn 10 năm kinh nghiệm trong phát triển hệ thống giao dịch tự động (Trading Bot), Fintech, Mobile App và phân tích dữ liệu tài chính (Quantitative Analysis). Người sáng lập và trực tiếp dẫn dắt các khóa học thực chiến tại Hướng Nghiệp Dữ Liệu.