Flutter持久化库drift(原moor)官方文档翻译汇总 - 掘金 (juejin.cn)
本文翻译自 drift 的 官方文档 Existing databases (simonbinder.eu)。
肉翻多有不足,不吝赐教。
现有的数据库
对现有数据库使用 drift 。
可以对 APP 中装载的预编程的数据库使用 drift 。
pre-propulated:预推进。
这里翻译成预编程(整句百度翻译的话是预编程),找不到合适的词,意思感觉是程序操作过的。
包含数据库
首先,创建想要装载到 APP 中的 sqlite3 数据库。可以在开发机器上用 sqlite3 CLI 工具 创建一个数据库。 当然,可以使用库如 sqlite3 (或 drift 本身) 来写程序创建数据库。
要使用户加载这个数据库,需要把它包含到 flutter asset 中去。只是简单地在 pubspec 中包含:
flutter:
assets:
- assets/my_database.db
提取数据库
要在使用 drift 前初始化数据库,需要从设备上的 APP 中提取 asset 。 在 drift 中,可以使用 LazyDatabase 在打开数据库之前来执行这个工作:
import 'package:drift/drift.dart';
import 'package:flutter/services.dart' show rootBundle;
LazyDatabase _openConnection() {
return LazyDatabase(() async {
// 在这里调用 db.sqlite ,把数据库文件放入 Docuements 文件夹中。
final dbFolder = await getApplicationDocumentsDirectory();
final file = File(p.join(dbFolder.path, 'app.db'));
if (!await file.exists()) {
// 从 asset 中提取预编程的数据库。
final blob = await rootBundle.load('assets/my_database.db');
await file.writeAsBytes(blob);
}
return NativeDatabase(file);
});
}
最后,使用这个方法打开数据库:
@DriftDatabase(tables: [Todos, Categories])
class MyDatabase extends _$MyDatabase {
MyDatabase() : super(_openConnection());
// ...