import 'package:sembast/sembast_io.dart'; import 'dart:async'; abstract class SemDbMgrBase { final Database database; abstract final String repositoryName; SemDbMgrBase(this.database); // 获取存储 StoreRef> get storeRef { return StoreRef>(repositoryName); } // 转换对象为Map Map toMap(T item); // 从Map创建对象 T fromMap(Map map) { // 有些情况下存储的数据并不足以创建实例,此时子类不实现 fromMap 而是新建一个附带更多参数的接口 // 注意此时 getAll 和 getById 等依赖 fromMap 的函数也不要使用,否则会抛出异常 throw UnimplementedError('fromMap is not implemented for this repository'); } // 添加或更新记录 Future addOrUpdate(T item, {String? id}) async { final itemMap = toMap(item); final recordId = id ?? DateTime.now().millisecondsSinceEpoch.toString(); await storeRef.record(recordId).put(database, itemMap); return recordId; } // 获取所有记录 Future> getAll() async { final records = await storeRef.find(database); return records.map((record) => fromMap(record.value)).toList(); } // 根据ID获取记录 Future getById(String id) async { final record = await storeRef.record(id).get(database); return record != null ? fromMap(record) : null; } // 删除记录 Future delete(String id) async { await storeRef.record(id).delete(database); } // 清空存储 Future clear() async { await storeRef.delete(database); } }