Dart 如何保存 List 并使用 Hive 检索

我有一个壁纸应用程序,它使用Firestore来存储壁纸.

我想使用配置单元来存储云防火墙的壁纸列表,但是如何保存壁纸列表并在以后检索呢?

当我试图保存列表时,出现以下错误:

E/Ffltter(9995):[错误:Ffltter/shell/common/shell.cc(199)]DART错误:未处理的异常: E/Ffltter(9995):HiveError:无法写入,未知类型:墙纸.您忘记注册适配器了吗?

代码:

class Wallpaper extends HiveObject {


  String date;
  String url;

  Wallpaper();

}

static Future<void> addWallpapers({@required String boxName, @required List<Wallpaper> wallpapers}) async {

    var box = await Hive.openBox(boxName);
    box.put(boxName, wallpapers);

    print("WALLPAPER ADICIONADO NO HIVE!");

  }

  static Future<List<Wallpaper>> getWallpapers({@required String boxName}) async {

    var box = await Hive.openBox(boxName);

    List<Wallpaper> wallpapers = box.get("latest");

    return wallpapers;

  }

推荐答案

您必须使用@HiveType()来指定对象.必须注册你的目标蜂巢.registerAdapter(墙纸适配器(),0);.

然而,你有part 'wallpaper.g.dart';个来生成所需的代码吗?

编辑: 首先,导入您的pubspec上的依赖项:

dependencies:
  hive: ^[version]
  hive_flutter: ^[version]

dev_dependencies:
  hive_generator: ^[version]
  build_runner: ^[version]

应该放在main.dart函数中的Hive.registerAdapter(MyObjectAdapter(), 0);.就在运行应用程序之前

您的HiveObject应该有如下注释:

@HiveType()
class Person extends HiveObject {
  @HiveField(0);
  String name;

  @HiveField(1);
  int age;
}

将此命令放在您的导入part 'person.g.dart';附近,然后在您的终端上运行代码生成.flutter packages pub run build_runner build.

带有代码生成功能的配置单元函数,因此此命令将生成您需要的文件

Dart相关问答推荐

基本数学函数的DART源代码

Dart:当两个或多个任务等待同一个 Future 时会发生什么

如何使用 dart 将 Uint8list 转换为 List

VS Code 无法识别 Flutter 中的单元测试

触发从小部件到状态对象的函数

Flutter 中的with关键字

Flutter 中带有导航栏的永久视图

Flutter - 可以在没有 Firebase 的情况下使用 Google 登录吗?

如何为 spawnUri 动态构建 Dart 脚本?

SliverList / SliverChildBuilderDelegate 提供初始索引或允许负索引

如何在 Flutter Web 中使用 Skia/CanvasKit?

如何在动态链接中传递参数?

如何计算列表中元素的出现次数

Package:flutter/src/widgets/overlay.dart':Failed assertion: line 133 pos 12: "_overlay != null"

如何在组件类中获取 ngForm 变量引用?

如何从Flatter应用程序中导航到网页?(OAuth)

从Dart中的另一个文件导入扩展名方法

如何在dart中获得一周的开始或结束

在 Dart 中覆盖哈希码的好方法是什么?

了解工厂构造函数代码示例