| 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 | 26 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.

Cấu trúc bảng và quan hệ trong SQLite Mobile

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.

So sánh SharedPreferences vs SQLite: Tính năng và Hiệu năng

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