如何保存 List<Object> 并使用 Hive 检索?

dja*_*ler 8 dart flutter google-cloud-firestore flutter-hive

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

我想使用 Hive 来存储来自 cloud firestore 的壁纸列表,但是如何保存壁纸列表并在以后检索它?

当我尝试保存列表时,出现此错误:

E/flutter (9995): [ERROR:flutter/shell/common/shell.cc(199)] Dart 错误:未处理的异常:E/flutter (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;

  }
Run Code Online (Sandbox Code Playgroud)

Rod*_*tos 8

您必须使用 @HiveType() 注释您的对象。并且必须注册您的对象 Hive.registerAdapter(WallpaperAdapter(), 0);。

然而,您是否必须part 'wallpaper.g.dart';生成所需的代码?

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

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

dev_dependencies:
  hive_generator: ^[version]
  build_runner: ^[version]
Run Code Online (Sandbox Code Playgroud)

您应该将其Hive.registerAdapter(MyObjectAdapter(), 0);放入您的main.dart函数中。就在 runApp 之前

你的 HiveObject 应该有这样的注释:

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

dev_dependencies:
  hive_generator: ^[version]
  build_runner: ^[version]
Run Code Online (Sandbox Code Playgroud)

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

Hive功能带有代码生成,所以这个命令会生成你需要的文件

  • 看起来文档需要认真改进,我没有看到任何相关示例。 (3认同)
  • 我同意你的看法。它应该更直接 (3认同)