首页 > 解决方案 > 如何创建多个 NoSQL 存储并访问它们(Flutter/Dart)?

问题描述

我正在尝试将 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 个独特的商店,然后能够在访问商店中的数据之间切换(比如通过按下按钮我可以循环浏览商店中的数据)?

提前致谢!

标签: databaseflutterdartnosqlsembast

解决方案


如何使用创建它们:

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

sembast 推荐的创建商店的方法


推荐阅读