Skip to content

Instantly share code, notes, and snippets.

@X-Wei
Created January 11, 2020 22:57
Show Gist options
  • Save X-Wei/13e3a009578767945874764187c89d6d to your computer and use it in GitHub Desktop.
Save X-Wei/13e3a009578767945874764187c89d6d to your computer and use it in GitHub Desktop.
HiveObject subclasses issue: must not register base class HiveObject
import 'package:hive/hive.dart';
/////////////// 'vehicle.dart' ///////////////
@HiveType(typeId: 0)
class Vehicle extends HiveObject {
@HiveField(0)
String name;
}
@HiveType(typeId: 1)
class Car extends Vehicle {}
@HiveType(typeId: 2)
class Boat extends Vehicle {}
/////////////// 'main.dart' ///////////////
void main() async {
Hive.init('./');
// Hive.registerAdapter(VehicleAdapter()); // <== **if uncomment this line, won't work after box.close()**
Hive.registerAdapter(CarAdapter());
Hive.registerAdapter(BoatAdapter());
print('Opening hive box named "test"');
await Hive.openBox<Vehicle>('test');
final box = Hive.box<Vehicle>('test');
await box.clear();
await box.add(Car());
await box.add(Boat());
await box.add(Car());
await box.add(Boat());
print('box values before box.close():');
for (final v in box.values) {
print(v);
}
await box.close();
print('box closed!');
/////////////
await Hive.openBox<Vehicle>('test');
final box2 = Hive.box<Vehicle>('test');
print('box values after re-opening box:');
for (final v in box2.values) {
print(v);
}
}
/////////////// 'vehicle.g.dart' ///////////////
class VehicleAdapter extends TypeAdapter<Vehicle> {
@override
final typeId = 0;
@override
Vehicle read(BinaryReader reader) {
var numOfFields = reader.readByte();
var fields = <int, dynamic>{
for (var i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return Vehicle()..name = fields[0] as String;
}
@override
void write(BinaryWriter writer, Vehicle obj) {
writer
..writeByte(1)
..writeByte(0)
..write(obj.name);
}
}
class CarAdapter extends TypeAdapter<Car> {
@override
final typeId = 1;
@override
Car read(BinaryReader reader) {
var numOfFields = reader.readByte();
var fields = <int, dynamic>{
for (var i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return Car()..name = fields[0] as String;
}
@override
void write(BinaryWriter writer, Car obj) {
writer
..writeByte(1)
..writeByte(0)
..write(obj.name);
}
}
class BoatAdapter extends TypeAdapter<Boat> {
@override
final typeId = 2;
@override
Boat read(BinaryReader reader) {
var numOfFields = reader.readByte();
var fields = <int, dynamic>{
for (var i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return Boat()..name = fields[0] as String;
}
@override
void write(BinaryWriter writer, Boat obj) {
writer
..writeByte(1)
..writeByte(0)
..write(obj.name);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment