12

我正在寻找一种将冷冻包和蜂巢包结合起来的解决方案。例如像这样:

@freezed
abstract class Person extends HiveObject with _$Person {
  @HiveType(typeId: 0)
  factory Person({@HiveField(0) String name, @HiveField(1) int age}) = _Person;
}

我知道这不可能开箱即用,但我想你知道我想要实现什么。用蜂巢实施冻结的最佳方法是什么?

我目前能想到的唯一解决方案是将冻结在蜂巢中生成的 json-String 存储起来。但我希望有更好的解决方案。

4

1 回答 1

22

是的,现在可以了,请确保您的最低版本是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);
}

唯一的缺点是您应该指定适配器的名称。

于 2020-10-20T07:04:32.377 回答