HiveError: There is already a TypeAdapter
HiveError: There is already a TypeAdapter
我目前正在我的 FlutterApp 中实现 Hive
。不幸的是,这个错误一直弹出:
HiveError: There is already a TypeAdapter for typeId 100.
这是我的对象:
@HiveType(typeId: 100)
class ShopList{
@HiveField(0)
String name;
@HiveField(1)
List<ListProduct> products = List();
ShopList({this.name, this.products});
这是自动生成的适配器:
class ShopListAdapter extends TypeAdapter<ShopList> {
@override
final int typeId = 100;
@override
ShopList read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return ShopList(
name: fields[0] as String,
products: (fields[1] as List)?.cast<ListProduct>(),
);
}
@override
void write(BinaryWriter writer, ShopList obj) {
writer
..writeByte(2)
..writeByte(0)
..write(obj.name)
..writeByte(1)
..write(obj.products);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is ShopListAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
我有一些其他对象 typeId
s 101 和 102,它们抛出相同的错误。
Hive.registerAdapter(ShopListAdapter));
在 try-catch-block
中运行。因此,如果适配器已经加载,代码可以继续,但是 FutureBuilder
-Widget 使用 Hive
中的值加载无限长。
你有什么建议吗?
您需要检查 typeId,即使在同一个文件中,它们也应该与其他 class 模型不同且唯一。
@HiveType(typeId: 0)
class Module1 {}
@HiveType(typeId: 1)
class Module2 {}
一旦 typeId 被更改,那么
reinstall the app,
delete .g.dart generated file,
run command ---> flutter packages pub run build_runner build
我使用的是 UserAdapter 类型 id=0
所以你应该在调用 Hive.registerAdapter
之前检查一下,因为我向你展示了下面的代码
if (!Hive.isAdapterRegistered(0)) {
Hive.registerAdapter(UserAdapter());
}
我目前正在我的 FlutterApp 中实现 Hive
。不幸的是,这个错误一直弹出:
HiveError: There is already a TypeAdapter for typeId 100.
这是我的对象:
@HiveType(typeId: 100)
class ShopList{
@HiveField(0)
String name;
@HiveField(1)
List<ListProduct> products = List();
ShopList({this.name, this.products});
这是自动生成的适配器:
class ShopListAdapter extends TypeAdapter<ShopList> {
@override
final int typeId = 100;
@override
ShopList read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return ShopList(
name: fields[0] as String,
products: (fields[1] as List)?.cast<ListProduct>(),
);
}
@override
void write(BinaryWriter writer, ShopList obj) {
writer
..writeByte(2)
..writeByte(0)
..write(obj.name)
..writeByte(1)
..write(obj.products);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is ShopListAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
我有一些其他对象 typeId
s 101 和 102,它们抛出相同的错误。
Hive.registerAdapter(ShopListAdapter));
在 try-catch-block
中运行。因此,如果适配器已经加载,代码可以继续,但是 FutureBuilder
-Widget 使用 Hive
中的值加载无限长。
你有什么建议吗?
您需要检查 typeId,即使在同一个文件中,它们也应该与其他 class 模型不同且唯一。
@HiveType(typeId: 0)
class Module1 {}
@HiveType(typeId: 1)
class Module2 {}
一旦 typeId 被更改,那么
reinstall the app,
delete .g.dart generated file,
run command ---> flutter packages pub run build_runner build
我使用的是 UserAdapter 类型 id=0
所以你应该在调用 Hive.registerAdapter
之前检查一下,因为我向你展示了下面的代码
if (!Hive.isAdapterRegistered(0)) {
Hive.registerAdapter(UserAdapter());
}