找不到盒子。您是不是忘记调用 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 时是不是忘记启用它

找不到“ubuntu / trusty64”框的“metadata.json”文件

在 Android 版 Firebase 中忘记密码

在项目目录中找不到“Podfile”