semDbMgrBase.dart 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import 'package:sembast/sembast_io.dart';
  2. import 'dart:async';
  3. abstract class SemDbMgrBase<T> {
  4. final Database database;
  5. abstract final String repositoryName;
  6. SemDbMgrBase(this.database);
  7. // 获取存储
  8. StoreRef<String, Map<String, dynamic>> get storeRef {
  9. return StoreRef<String, Map<String, dynamic>>(repositoryName);
  10. }
  11. // 转换对象为Map
  12. Map<String, dynamic> toMap(T item);
  13. // 从Map创建对象
  14. T fromMap(Map<String, dynamic> map);
  15. // 添加或更新记录
  16. Future<String> addOrUpdate(T item, {String? id}) async {
  17. final itemMap = toMap(item);
  18. final recordId = id ?? DateTime.now().millisecondsSinceEpoch.toString();
  19. await storeRef.record(recordId).put(database, itemMap);
  20. return recordId;
  21. }
  22. // 获取所有记录
  23. Future<List<T>> getAll() async {
  24. final records = await storeRef.find(database);
  25. return records.map((record) => fromMap(record.value)).toList();
  26. }
  27. // 根据ID获取记录
  28. Future<T?> getById(String id) async {
  29. final record = await storeRef.record(id).get(database);
  30. return record != null ? fromMap(record) : null;
  31. }
  32. // 删除记录
  33. Future<void> delete(String id) async {
  34. await storeRef.record(id).delete(database);
  35. }
  36. // 清空存储
  37. Future<void> clear() async {
  38. await storeRef.delete(database);
  39. }
  40. }