Flutter - 如何在蜂巢中添加和检索数据?

Posted

技术标签:

【中文标题】Flutter - 如何在蜂巢中添加和检索数据?【英文标题】:Flutter - How to add and retrieve data to/from hive? 【发布时间】: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

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

【问题讨论】:

【参考方案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') 确保您使用相同的框名。也许你有错字? 不,没有错字。这就是我感到困惑的原因。

以上是关于Flutter - 如何在蜂巢中添加和检索数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中删除蜂巢中的所有框?

颤振蜂巢盒不可听

使用 Flutter 在 Firebase 中使用 Stream<QuerySnapshot> 检索数据

如何在 Flutter 中检索 Apple IDFA?

颤振:如何将蜂巢监视绑定到 getx 中的 RxList 对象

从蜂巢桶读取记录的问题