0

我正在尝试将 Sembast 用作应用程序的本地数据库,但在创建和访问数据库中的不同“商店”时遇到了麻烦。

到目前为止,我可以初始化并访问一个商店,但我希望能够创建 3 个不同的商店并在需要时访问它们中的每一个。到目前为止,我的代码如下所示:

创建数据库和唯一存储:

class SembastActivityRepository extends ActivityRepository {
  final String activityName; //available paths are log, user_preferences,
  final StoreRef<int, Map<String, dynamic>> _store;
  final Database _database = GetIt.I.get();

  SembastActivityRepository({this.activityName})
      : _store = intMapStoreFactory.store(activityName);

  @override
  Future<int> insertActivity(Activity activity) async {
    return await _store.add(_database, activity.toMap());
  }

  @override
  Future updateActivity(Activity activity) async {
    await _store.record(activity.id).update(_database, activity.toMap());
  }
...
}

初始化名为“Sleep”的数据库和存储:

class Init {
  //final String activityName;
  //Init(this.activityName);

  static Future initialize() async {
    //initialize Sembast database
    final appDir = await getApplicationDocumentsDirectory();
    await appDir.create(recursive: true);
    final databasePath = join(appDir.path, "sembast.db");
    final database = await databaseFactoryIo.openDatabase(databasePath);
    GetIt.I.registerSingleton<Database>(database);

    //register Repository
    GetIt.I.registerLazySingleton<ActivityRepository>(
        () => SembastActivityRepository(activityName: 'Sleep'));
  }
...
}

我如何能够创建 3 个独特的商店,然后能够在访问商店中的数据之间切换(比如通过按下按钮我可以循环浏览商店中的数据)?

提前致谢!

4

2 回答 2

2

如何使用创建它们:

final sleepDbStore = sembast.intMapStoreFactory.store('sleep');
final sweetDreamsDbStore = sembast.intMapStoreFactory.store('sweetDreams');
final nightmaresDbStore = sembast.intMapStoreFactory.store('nightmares');

sembast 推荐的创建商店的方法

于 2020-09-01T06:35:55.843 回答
1

存储只是一个具有名称和类型的键和值的定义。您可以简单地在您的SembastActivityRepository类中声明多个商店或使用不同的活动名称创建多个子类(这听起来像您使用的商店的名称)。

于 2020-07-23T16:23:41.087 回答