找不到盒子。您是不是忘记调用 Hive.openBox()? - 即使我打开了它也没有检测到盒子
Posted
技术标签:
【中文标题】找不到盒子。您是不是忘记调用 Hive.openBox()? - 即使我打开了它也没有检测到盒子【英文标题】:Box not found. Did you forget to call Hive.openBox()? - does not detect the box even though I have opened it找不到盒子。您是否忘记调用 Hive.openBox()? - 即使我打开了它也没有检测到盒子 【发布时间】:2021-11-12 03:29:19 【问题描述】:在特定页面上获取一些数据并移动到另一个页面后,我试图打开我的盒子。但是,它一直说我没有打开它。为什么?
GestureDetector(
onTap: () async
final data = Hive.openBox('$setTask.getAt(index)');
setState(()
Navigator.push(
context,
MaterialPageRoute(builder: (context) =>
Tasks(setTask.getAt(index), data)));
);
,
);
下一页
final opendata;
Tasks(@required this.opendata);
另外..当小部件构建时,我在有状态的小部件中添加了一行
最终的 openBox = Hive.openBox('$widget.hiveName');
将其放入 initState() 并使用 async 和 await 也不起作用。
【问题讨论】:
盒子没有打开的错误到底是哪里抛出的? 在下一页,在 ListView.builder 中 你能给我们看一下代码吗?目前,我们只能说缺少await
,但根据您的说法,这不是原因。
请仔细阅读 [hive] 标签的用途。正确的标签是flutter-hive。
【参考方案1】:
要解决您的问题,您必须添加 await,即
final data = await Hive.openBox('box');
而不是,
final data = Hive.openBox('box');
这里的问题是,Flutter 正在重建状态而不等待 Hive 实际打开盒子,因此出现错误。添加 await 会告诉 Flutter 跟踪 Hive 打开盒子并相应地工作(即刷新状态或任何你想做的事情)。
【讨论】:
如果我需要使用 await,我也必须使用 async 但是我如何使用 async一个有状态的小部件。我试过这个,但它不起作用以上是关于找不到盒子。您是不是忘记调用 Hive.openBox()? - 即使我打开了它也没有检测到盒子的主要内容,如果未能解决你的问题,请参考以下文章
找不到包装器“https” - 您在配置 PHP 时是不是忘记启用它?
找不到包装器“https” - 您在配置 PHP 时是不是忘记启用它?
找不到套接字传输“tls” - 您在配置 PHP 时是不是忘记启用它