【问题标题】: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。

标签: flutter dart flutter-hive


【解决方案1】:

要解决您的问题,您必须添加 await,即

final data = await Hive.openBox('box');

而不是,

final data = Hive.openBox('box');

这里的问题是,Flutter 正在重建状态而不等待 Hive 实际打开盒子,因此出现错误。添加 await 会告诉 Flutter 跟踪 Hive 打开盒子并相应地工作(即刷新​​状态或任何你想做的事情)。

【讨论】:

  • 如果我需要使用 await,我也必须使用 async 但是我如何使用 async一个有状态的小部件。我试过这个,但它不起作用
猜你喜欢
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2020-03-13
  • 1970-01-01
相关资源
最近更新 更多