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> 检索数据