【问题标题】:NoSQL creating and accessing different store referencesNoSQL 创建和访问不同的存储引用
【发布时间】:2020-11-07 11:52:33
【问题描述】:

我正在尝试为 Flutter 应用程序创建一个 NoSQL 数据库,该应用程序具有用于全天不同活动(睡眠、锻炼、饮食等)的不同存储。我不想对商店进行硬编码,并且希望能够根据需要添加和删除商店。

我遇到的问题是 intMapStoreFactory.store() 需要静态输入,但 SembastActivityRepository 的输入不能是静态的。有没有办法从这个 WembastActivityRepository 类之外创建和访问自定义商店名称?

谢谢!

import 'package:get_it/get_it.dart';
import 'package:sembast/sembast.dart';

import './activity.dart';
import './activity_repository.dart';

class SembastActivityRepository extends ActivityRepository {
  final activityName;
  SembastActivityRepository({this.activityName});
  
  final Database _database = GetIt.I.get();
  final StoreRef _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());
  }

  @override
  Future deleteActivity(int activityId) async {
    await _store.record(activityId).delete(_database);
  }

  @override
  Future<List<Activity>> getAllActivities() async {
    final snapshots = await _store.find(_database);
    return snapshots
        .map((snapshot) => Activity.fromMap(snapshot.key, snapshot.value))
        .toList(growable: false);
  }
}

【问题讨论】:

    标签: database flutter dart nosql sembast


    【解决方案1】:

    我不确定你所说的静态是什么意思,但无论如何你的代码无法编译,我强烈建议使用强模式来获得编译时间建议。 StoreRef 只是一个存储及其键和值类型的声明,您可以随时创建/重新创建StoreRef,存储本身仅在您向其中添加记录时创建。

    如果只是为了让你的代码编译,在构造函数中初始化_store:

    class SembastActivityRepository {
      final String activityName;
      final StoreRef<int, Map<String, dynamic>> _store;
    
      SembastActivityRepository({this.activityName})
          : _store = intMapStoreFactory.store(activityName);
    
      // ...
    }
    

    【讨论】:

    • 是的,这可以创建一个自定义命名商店!我怎样才能创建多个商店然后访问它们?
    • 没有什么可以阻止您在存储库中拥有多个存储或使用不同的 activityName 创建多个 SembastActivityRepostory 对象
    猜你喜欢
    • 2020-11-10
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多