Created
January 11, 2020 22:57
-
-
Save X-Wei/13e3a009578767945874764187c89d6d to your computer and use it in GitHub Desktop.
HiveObject subclasses issue: must not register base class HiveObject
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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