我有一个壁纸应用程序,它使用firestore来存储壁纸。
我想使用hive存储cloud firestore中的墙纸列表,但如何保存墙纸列表并稍后检索?
当我试图保存列表时,出现以下错误:
e/Flutter(9995):[error:flutter/shell/common/shell.cc(199)]dart错误:未处理的异常:e/flatter(9995):hiveerror:无法写入,未知类型:wallpaper。你忘记注册适配器了吗?
代码:
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;
}
2条答案
按热度按时间hpxqektj1#
您必须使用@hivetype()指定对象。并且必须注册您的对象配置单元。registeradapter(wallperAdapter(),0);。
但是,你有吗
part 'wallpaper.g.dart';
生成所需的代码?编辑:首先导入pubspec上的依赖项:
这个
Hive.registerAdapter(MyObjectAdapter(), 0);
你应该把你的main.dart
功能。就在runapp之前您的hiveobject应该具有如下注解:
把这个命令放在你的入口附近
part 'person.g.dart';
在终端上运行代码生成。flutter packages pub run build_runner build
.具有代码生成的hive函数,因此此命令将生成所需的文件
2g32fytz2#
我通过在hivetype中包含一个实际的id来解决这个问题。这样地:
更多的hivetype模型需要增加这个数量。所以每个值都是唯一的(我猜是连续的,但我没有对此进行测试)。