// Isar 数据库初始化 — 原生平台实现 (Android/iOS/Desktop) // // 在原生平台上使用 Isar 3.x 本地数据库。 // Web 平台使用 isar_database_web.dart stub。 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; /// 原生平台 Isar 可用 static bool get isAvailable => true; /// 初始化数据库 static Future init() async { if (_initialized) return; final dir = await getApplicationDocumentsDirectory(); _instance = await Isar.open( schemas, directory: dir.path, inspector: true, // 开发模式,发布时关闭 ); _initialized = true; } /// 获取 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(); }); } }