【问题标题】:combine freezed & hive结合冷冻和蜂巢
【发布时间】:2020-06-08 12:16:56
【问题描述】:

我正在寻找一种将freezedhive 包结合起来的解决方案。 比如这样:

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

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

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

【问题讨论】:

  • 来自冻结的文档,All decorators passed to a constructor parameter are "copy-pasted" to the generated property too. 那么是什么让您认为您的代码不能开箱即用?
  • 你不能使用 freezed 因为HiveObject 是可变的。看到这个:github.com/hivedb/hive/issues/225
  • @FrankTreacy 感谢您向我指出这一点! :) 我想我可以搜索得更好.. 我只在冻结的 github 上搜索了这个主题

标签: flutter dart flutter-hive


【解决方案1】:

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

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

【讨论】:

  • 运行 build_runner 后,适配器不会自动为我生成。应该吗?
  • @squirtgun 我也注意到了这一点。如果您使用 flutter pub run build_runner build --delete-conflicting-outputs ,它似乎是 not 生成的。如果您再次使用flutter pub run build_runner build 运行,它似乎可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多