Skip to content

Instantly share code, notes, and snippets.

@dinko7
Created December 3, 2023 11:14
Show Gist options
  • Save dinko7/2033d9d7efd8a571dcb532bc7fdd3cf9 to your computer and use it in GitHub Desktop.
Save dinko7/2033d9d7efd8a571dcb532bc7fdd3cf9 to your computer and use it in GitHub Desktop.
Hive Generic Enum Class Adapter Example
import 'package:hive_flutter/hive_flutter.dart';
/**
* Generic adapter for enum classes.
*/
class EnumClassAdapter<T extends Enum> extends TypeAdapter<T> {
EnumClassAdapter(this.typeId, this.values);
static const int _numberOfFields = 1;
@override
final int typeId;
final List<T> values;
@override
T read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = {for (var _ = 0; _ < numOfFields; _++) reader.readByte(): reader.read()};
return values[fields[0] as int];
}
@override
void write(BinaryWriter writer, T obj) {
writer
..writeByte(_numberOfFields)
..writeByte(0)
..write(obj.index);
}
}
//usage
enum Category { one, two, three }
Hive.registerAdapter<Category>(EnumClassAdapter<Category>(1, Category.values));
await Hive.initFlutter();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment