持久化组件

持久化组件用于在设备上持久化存储数据,包括键值对存储、数据库等。

提示:根据数据类型和需求选择合适的持久化方案。

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
高性能
易于使用