如何处理枚举在蜂群颤振?



我有一个枚举在我的模型类:

MyRepresentation { list, tabs, single }

我已经添加了一个适配器并注册了它。我给了它一个合适的类型id和字段。

给出错误:

HiveError: Cannot write, unknown type: MyRepresentation。你忘记注册适配器了吗?

是否也注册了枚举还是只注册了模型?说你的模型文件myrepresentation。Dart看起来像这样:

import 'package:hive/hive.dart';
part 'myrepresentation.g.dart';
@HiveType(typeId: 1)
class MyRepresentation extends HiveObject {
@HiveField(0)
final String id;
@HiveField(1)
final Foo foo;
MyRepresentation({required this.id, required this.foo});
}
@HiveType(typeId: 2)
enum Foo {
@HiveField(0)
foo,
@HiveField(1)
bar,
}

然后生成类型适配器并初始化

void main() async {
await Hive.initFlutter();
...
Hive.registerAdapter(MyRepresentationAdapter());
Hive.registerAdapter(FooAdapter());
runApp(MyApp());
}

如果你这样做了,它仍然给你问题,你可以试着把枚举放在它自己的文件中,并编写自己的part语句。

如果这仍然不起作用,我建议简单地将枚举存储为int自己在TypeAdapterread()write()方法中,如下所示:

@override
MyRepresentation read(BinaryReader reader) {
return MyRepresentation(
reader.read() as String,
Foo.values[reader.read() as int]
);
}
@override
void write(BinaryWriter writer, MyRepresentation obj) {
writer.write(obj.id);
writer.write(obj.foo.index);
}

最新更新