我正在寻找一种将freezed个和hive个包裹组合在一起的解决方案. 例如,如下所示:

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

我知道这是不可能的,但我想你知道我想要实现什么.用蜂窝实现冻结的最佳方式是什么?

我目前能想到的唯一解决方案是存储由冻结在hive中生成的json字符串.但我希望有更好的解决办法.

推荐答案

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

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

Dart相关问答推荐

如何映射作为DART中其他模型基础的复杂模型

Dart,后面带感叹号的标识符

如何在 Dart 游戏中重复听按键?

Flutter Drawer 作为单独的小部件不允许修改宽度

在 Dart/Flutter 中创建 DateTime 对象时如何指定 TimeZone?

为什么Dart中的 abs() 函数在没有用括号括起来时返回负数?

AnimatedContainer 可以为其高度设置动画吗?

如何使用文本小部件设置多行文本?

flutter命令运行失败

在Flatter中,依赖项必须指定版本号?

在 Windows 10 中使用 Android Studio 时没有Remove Widget选项

Dart VM 的性能与 Node.js 相比如何?

如何在 Flutter DropDown 按钮中搜索

在小部件构建期间,如何在Flutter中导航?

Flutter Drawer Widget - 更改 Scaffold.body 内容

找到两个数字中larger/smaller的方法是什么

如何在 URL 中获取查询参数

在dart中获取列表的最后一个元素

用一个 catch 表达式在 Dart 中捕获多种特定的异常类型

Dart 脚本会在浏览器中本地运行吗?