0

アプリのローカル データベースとして Sembast を使用しようとしていますが、データベース内のさまざまな「ストア」の作成とアクセスに問題があります。

これまでのところ、1 つのストアを初期化してアクセスできますが、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 に答える