Flutter:没有为“Box”类型定义方法“listenable”(使用 Hive)

Posted

技术标签:

【中文标题】Flutter:没有为“Box”类型定义方法“listenable”(使用 Hive)【英文标题】:Flutter: The method 'listenable' isn't defined for the type 'Box' (using Hive) 【发布时间】:2020-10-23 23:03:46 【问题描述】:

我正在尝试使用 Hive 读取 Box 的内容,遵循 this SO 评论,但我收到以下错误:

没有为类型“Box”定义方法“listenable”

有问题的代码是:

FutureBuilder(
      future: Hive.openBox<Contact>('testBox'),
      builder: (context, snapshot) 
        return ValueListenableBuilder(
          valueListenable: Hive.box<Contact>('contacts').listenable(),
          builder: (context, Box<Contact> box, _) 
            if (box.values.isEmpty) 
              return Text('data is empty');
             else 
              return ListView.builder(
                itemCount: box.values.length,
                itemBuilder: (context, index) 
                  var contact = box.getAt(index);
                  return ListTile(
                    title: Text(contact.name),
                    subtitle: Text(contact.age.toString()),
                  );
                ,
              );
            
          ,
        );
      ,
    ),

pubspec.yaml:

hive: ^1.4.1+1
hive_flutter:
  git:
    url: git://github.com/hivedb/hive.git
    path: hive_flutter

我要做的是在屏幕加载时列出框的内容。我似乎无法弄清楚我哪里出错了 - 任何指导将不胜感激!

【问题讨论】:

【参考方案1】:

解决方法:需要先导入hive_flutter.dart

import 'package:hive_flutter/hive_flutter.dart';

【讨论】:

关于 IDE 是否表示未使用 hive_flutter 的导入以及 .listenable() 仍会抛出“未为类型 'Box' 定义方法 'listenable' 的任何建议。”错误? @ZachSmith,我通过导入 hive 和 hive_flutter 的两个包解决了这个问题: Import 'package:hive/hive.dart';导入'包:hive_flutter/hive_flutter.dart';【参考方案2】:

获取 Hive 的最高升级版本,(目前是)hive: ^2.0.4 获取最新版本的 Hive_Flutter(当前)hive_flutter: ^1.0.0

请在您的工作空间中全部导入

import 'package:hive_flutter/hive_flutter.dart';
import 'package:hive/hive.dart';

而且你很好去使用,Box,Value-Listenable,Builder...等等。

【讨论】:

【参考方案3】:

使用@MrJax 的回答后,如果您收到如下错误:'The method 'listenable' is not defined for the type 'Box',您应该导入两个 hive 包:

import 'package:hive_flutter/hive_flutter.dart';
import 'package:hive/hive.dart';

并为 ValueListenableBuilder 小部件分配 Box 类型,如下所示:ValueListenableBuilderContact>>

【讨论】:

以上是关于Flutter:没有为“Box”类型定义方法“listenable”(使用 Hive)的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:没有为“Object”类型定义运算符“[]”。尝试定义运算符'[]'

Flutter - 错误:没有为“对象”类型定义吸气剂“文档”

Flutter Hive getter 没有为“hiveobjectmixin”类型定义

没有为“ThemeProvider”类型定义“of”方法。在颤振中

颤振蜂巢盒不可听

Flutter -> UploadTask 方法 OnComplete 不存在