// Isar 数据库初始化 — 本地持久化存储 // // Isar 3.x 要求 open() 时传入 List。 // 通过 build_runner 生成 Schema,在 main.dart 启动时调用 init()。 import 'package:isar/isar.dart'; import 'package:path_provider/path_provider.dart'; import 'collections/journal_entry_collection.dart'; import 'collections/journal_element_collection.dart'; import 'collections/pending_operation_collection.dart'; /// Isar 数据库单例管理 class IsarDatabase { IsarDatabase._(); static Isar? _instance; static bool _initialized = false; /// 所有 Collection Schema(由 build_runner 生成) static final List> schemas = [ JournalEntryCollectionSchema, JournalElementCollectionSchema, PendingOperationCollectionSchema, ]; /// 是否已初始化 static bool get isInitialized => _initialized; /// 初始化数据库 /// /// 在 main() 中调用,open 之前需确保 WidgetsFlutterBinding 已初始化。 static Future init() async { if (_instance != null && _instance!.isOpen) return _instance!; final dir = await getApplicationDocumentsDirectory(); _instance = await Isar.open( schemas, directory: dir.path, inspector: true, // 开发模式,发布时关闭 ); _initialized = true; return _instance!; } /// 获取 Isar 实例(必须先调用 [init]) static Isar get instance { if (_instance == null || !_instance!.isOpen) { throw StateError('IsarDatabase 未初始化,请先调用 IsarDatabase.init()'); } return _instance!; } /// 关闭数据库连接 static Future close() async { if (_instance != null && _instance!.isOpen) { await _instance!.close(); _instance = null; _initialized = false; } } /// 清空所有数据(仅用于测试) static Future clearAll() async { if (_instance == null || !_instance!.isOpen) return; await _instance!.writeTxn(() async { await _instance!.clear(); }); } }