【问题标题】:Flutter - How to add and retrieve data to/from hive?Flutter - 如何在蜂巢中添加和检索数据?
【发布时间】:2022-01-03 11:59:13
【问题描述】:

我知道这听起来很简单,我浏览了文档中给出的示例。但不知何故,我无法做到正确。

这就是我所拥有的:

 void main() async {
  await Hive.initFlutter();
  //Hive.openBox('workoutBox');
  runApp(const MyApp());
}
...

下一屏:

var box;
...

试图添加到盒子里

Future<void> _save() async{
// save doc id somewhere
final Id = doc.id;

//box = await Hive.openBox('workoutBox');
box.put("Id", Id);
}

尝试在另一个函数中检索:

var someId = box.get("Id");

当前错误:get 被调用为 null

我的困惑是,在这种情况下,你在哪里/如何声明、打开和从盒子中取回?

【问题讨论】:

    标签: flutter dart caching flutter-hive


    【解决方案1】:

    您似乎忘记初始化 Box 参数并将 openBox 函数返回的值分配给它。

    在 Hive 初始化之后,你应该有这样的东西:

    Box<myValue> boxValue = await Hive.openBox("myKey");
    

    重要提示:检索方法将取决于您需要做什么,更重要的是,首先取决于您保存数据的方式。

    假设您保存的数据是这样的:

    await boxValue.add(value);
    

    通过添加这样的数据,分配给该值的键将是一个自动递增的键,因此尝试使用从未分配过的特定键检索它将会失败。

    如果您确实添加了这样的数据:

    await boxValue.put("myKey", value);
    

    那么您将能够使用预期的密钥成功获取它。

    【讨论】:

      【解决方案2】:

      您可以执行以下操作:

      void main() async {
        await Hive.initFlutter();
        await Hive.openBox('workoutBox'); //<- make sure you await this
        runApp(const MyApp());
      }
      
      ...
      
      _save() { // <- can be a synchronous function
        final box = Hive.box('workoutBox'); //<- get an already opened box, no await necessary here
        // save doc id somewhere
        final Id = doc.id;
        box.put("Id", Id);
      }
      
      

      【讨论】:

      • _save 必须是异步函数,因为它正在保存其他数据。另外,我如何从盒子里取回??
      • 另外,它一直说“你忘记调用 Hive.openBox() 了吗?”。
      • 根据文档(pub.dev/packages/hive),您可以致电box.get('your_key')
      • 确保您使用相同的框名。也许你有错字?
      • 不,没有错字。这就是我感到困惑的原因。
      猜你喜欢
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多