持久化组件
持久化组件用于在设备上持久化存储数据,包括键值对存储、数据库等。
提示:根据数据类型和需求选择合适的持久化方案。
SharedPreferences
SharedPreferences 用于存储简单的键值对数据。
import 'package:shared_preferences/shared_preferences.dart';
// 获取实例
final prefs = await SharedPreferences.getInstance();
// 存储数据
await prefs.setString('username', 'john');
await prefs.setInt('age', 25);
await prefs.setBool('isLoggedIn', true);
await prefs.setDouble('price', 99.99);
await prefs.setStringList('tags', ['flutter', 'dart']);
// 读取数据
final username = prefs.getString('username');
final age = prefs.getInt('age');
final isLoggedIn = prefs.getBool('isLoggedIn');
// 删除数据
await prefs.remove('username');
// 清空所有数据
await prefs.clear();
// 检查键是否存在
final hasKey = prefs.containsKey('username');
SharedPreferences 数据存储
username
"john"
age
25
isLoggedIn
true
price
99.99
tags
["flutter", "dart"]
Hive
Hive 是一个轻量级、快速的 NoSQL 数据库。
import 'package:hive/hive.dart';
// 打开数据库
final box = await Hive.openBox('myBox');
// 存储数据
await box.put('name', 'Flutter');
await box.put('version', '3.0');
// 读取数据
final name = box.get('name');
final version = box.get('version');
// 使用类型适配器
@HiveType(typeId: 0)
class User extends HiveObject {
@HiveField(0)
String name;
@HiveField(1)
int age;
User({required this.name, required this.age});
}
// 注册适配器
Hive.registerAdapter(UserAdapter());
// 存储
await box.put('user', User(name: 'John', age: 25));
SQLite
SQLite 是一个轻量级的 SQL 数据库。
import 'package:sqflite/sqflite.dart';
// 打开数据库
final db = await openDatabase(
'my_database.db',
version: 1,
onCreate: (db, version) {
return db.execute(
'CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)',
);
},
);
// 插入数据
await db.insert(
'users',
{'name': 'John', 'age': 25},
conflictAlgorithm: ConflictAlgorithm.replace,
);
// 查询数据
final users = await db.query('users');
// 更新数据
await db.update(
'users',
{'age': 26},
where: 'name = ?',
whereArgs: ['John'],
);
// 删除数据
await db.delete(
'users',
where: 'name = ?',
whereArgs: ['John'],
);
// 执行原始 SQL
await db.rawQuery('SELECT * FROM users WHERE age > ?', [20]);
SQLite 数据库表
| id | name | age |
|---|---|---|
| 1 | John | 25 |
| 2 | Alice | 30 |
SharedPreferences
Isar 是一个高性能的 NoSQL 数据库。
import 'package:isar/isar.dart';
@collection
class User {
Id id = Isar.autoIncrement;
String name;
int age;
User({required this.name, required this.age});
}
// 打开数据库
final isar = await Isar.open([UserSchema]);
// 写入事务
await isar.writeTxn(() async {
final user = User(name: 'John', age: 25);
await isar.users.put(user);
});
// 查询数据
final users = await isar.users.where().findAll();
// 条件查询
final youngUsers = await isar.users
.where()
.ageLessThan(30)
.findAll();
// 删除数据
await isar.writeTxn(() async {
await isar.users.clear();
});
Isar 查询结果
查询: users.where().ageLessThan(30)
| id | name | age |
|---|---|---|
| 1 | John | 25 |
| 2 | Emma | 22 |
ObjectBox
ObjectBox 是一个高性能的对象数据库。
import 'package:objectbox/objectbox.dart';
@Entity()
class User {
int id = 0;
String name;
int age;
User({required this.name, required this.age});
}
// 打开数据库
final store = await openStore();
final box = store.box();
// 存储数据
final user = User(name: 'John', age: 25);
final id = box.put(user);
// 读取数据
final savedUser = box.get(id);
final allUsers = box.getAll();
// 更新数据
user.age = 26;
box.put(user);
// 删除数据
box.remove(id);
// 查询数据
final youngUsers = box.query(User_.age.lessThan(30)).build().find();
持久化方案选择:
- SharedPreferences: 简单配置、用户设置
- Hive: 轻量级数据、快速访问
- SQLite: 复杂查询、关系数据
- Isar: 高性能、大量数据
- ObjectBox: 对象导向、高性能
数据库类型对比
Hive
NoSQL
轻量快速
无关系
轻量快速
无关系
SQLite
SQL
关系型
复杂查询
关系型
复杂查询
Isar
NoSQL
高性能
类型安全
高性能
类型安全
ObjectBox
对象DB
高性能
易于使用
高性能
易于使用