结合冷冻和蜂巢
combine freezed & hive
我正在寻找组合 freezed and hive 包的解决方案。
例如像这样:
@freezed
abstract class Person extends HiveObject with _$Person {
@HiveType(typeId: 0)
factory Person({@HiveField(0) String name, @HiveField(1) int age}) = _Person;
}
我知道开箱即用是不可能的,但我想你知道我想要实现什么。使用 hive 实现冻结的最佳方法是什么?
我目前唯一能想到的解决办法就是将freezed生成的json-String存放在hive中。但我希望有更好的解决方案。
是的,现在可以了,请确保您的最低版本是 hive_generator: ^0.7.2+1
。
举个例子你可以这样写:
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hive/hive.dart';
part 'immutable_class.freezed.dart';
part 'immutable_class.g.dart';
@freezed
abstract class ImmutableClass with _$ImmutableClass {
@HiveType(typeId: 5, adapterName: 'ImmutableClassAdapter')
const factory ImmutableClass({
@JsonKey(name: 'id', required: true, disallowNullValue: true) @HiveField(0) int id,
@HiveField(1) int someField1,
@HiveField(2) String someField2,
}) = _ImmutableClass;
factory ImmutableClass.fromJson(Map<String, dynamic> json) => _$ImmutableClassFromJson(json);
}
唯一的缺点是您应该指定适配器的名称。
我正在寻找组合 freezed and hive 包的解决方案。 例如像这样:
@freezed
abstract class Person extends HiveObject with _$Person {
@HiveType(typeId: 0)
factory Person({@HiveField(0) String name, @HiveField(1) int age}) = _Person;
}
我知道开箱即用是不可能的,但我想你知道我想要实现什么。使用 hive 实现冻结的最佳方法是什么?
我目前唯一能想到的解决办法就是将freezed生成的json-String存放在hive中。但我希望有更好的解决方案。
是的,现在可以了,请确保您的最低版本是 hive_generator: ^0.7.2+1
。
举个例子你可以这样写:
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hive/hive.dart';
part 'immutable_class.freezed.dart';
part 'immutable_class.g.dart';
@freezed
abstract class ImmutableClass with _$ImmutableClass {
@HiveType(typeId: 5, adapterName: 'ImmutableClassAdapter')
const factory ImmutableClass({
@JsonKey(name: 'id', required: true, disallowNullValue: true) @HiveField(0) int id,
@HiveField(1) int someField1,
@HiveField(2) String someField2,
}) = _ImmutableClass;
factory ImmutableClass.fromJson(Map<String, dynamic> json) => _$ImmutableClassFromJson(json);
}
唯一的缺点是您应该指定适配器的名称。