颤振打开 Hive 框会给出错误 - 说找不到框,您是不是忘记调用 Hive openbox()

Posted

技术标签:

【中文标题】颤振打开 Hive 框会给出错误 - 说找不到框,您是不是忘记调用 Hive openbox()【英文标题】:flutter opening a Hive box gives error -says box not found, Did you forget to call Hive openbox()颤振打开 Hive 框会给出错误 - 说找不到框,您是否忘记调用 Hive openbox() 【发布时间】:2021-09-02 18:28:45 【问题描述】:

我有一堂课,我正在做 graphql 设置和蜂巢箱设置。这是课程-

class GraphQLConfiguration 
  ValueNotifier<GraphQLClient> client = new ValueNotifier<GraphQLClient>(
    GraphQLClient(
      cache:
      GraphQLCache(store: HiveStore(Hive.box(HiveStore.defaultBoxName))),
      link: HttpLink('http://localhost:4000/graphql/',),
    ),
  );
  GraphQLConfiguration()  
    initializeHive();
  
  void initializeHive() async 
    await initHiveForFlutter(); // or await initHiveForFlutter();
    await Hive.openBox('bolBox');
  

现在我在 Flutter 的 main 方法中初始化这个类 -

Future main() async 
   GraphQLConfiguration graphql = new GraphQLConfiguration();

当我运行此代码时,我收到此错误消息 -

错误 - 未处理的异常:HiveError:找不到框。您是否忘记调用 Hive.openBox()?

我也关注了这个帖子Box not found. Did you forget to call Hive.openBox()?,没有帮助。

【问题讨论】:

【参考方案1】:

通过使用 path_provider 为其提供主目录来初始化 Hive

final Directory appDocDir = await getApplicationDocumentsDirectory();
Hive.init(appDocDir.path);

然后打开盒子

await Hive.openBox('bolBox');

【讨论】:

【参考方案2】:

在您的根文件夹中添加 initHiveForFlutter 即可解决问题。

void main() async
  await initHiveForFlutter();
  runApp(MyApp());

为我工作。

无需使用打开的框和路径进行初始化,因为 GraphQl 在 initHiveForFlutter 内部处理。

【讨论】:

以上是关于颤振打开 Hive 框会给出错误 - 说找不到框,您是不是忘记调用 Hive openbox()的主要内容,如果未能解决你的问题,请参考以下文章

猪没有使用 Hcatalog 定位 Hive 表

打开虚拟机时说找不到vmx文件,该怎么办

matlab中用imread()读一个图片,已经给出了绝对路径,但总是提示说找不到这个文件,这到底是怎么回事儿啊

MATLAB7.0装好后打开说找不到指定模块该怎么办

在你的颤振项目中找不到颤振 sdk 中的飞镖?

将表格抓取并写入数据框会显示 TypeError