Fli*_*lik 5 hive flutter json-serializable freezed
我有一个类,我试图将其与 Freezed、Json Serialized 和 Hive 一起使用。运行dart run build_runner build并生成必要的类后,我的编译器给出以下错误:
: Error: Can't use '_$FooBarFromJson' because it is declared more than once.
和
: Error: '_$FooBarFromJson' is already declared in this scope.
part 'foobar.freezed.dart';
part 'foobar.g.dart';
@freezed
@JsonSerializable(explicitToJson: true)
@HiveType(typeId: 0)
class FooBar extends HiveObject with _$FooBar {
factory FooBar({
@HiveField(0) required int baz
}) = _FooBar;
factory FooBar.fromJson(Map<String, dynamic> json) =>
_$FooBarFromJson(json);
}
}
Run Code Online (Sandbox Code Playgroud)
查看生成的类后,我的foobar.g.dart文件包含以下方法:
FooBar _$FooBarFromJson(Map<String, dynamic> json) => FooBar(
baz: json['baz'] as int,
);
Map<String, dynamic> _$FooBarToJson(FooBar instance) =>
<String, dynamic>{
'baz': instance.baz,
};
_$_FooBar _$$_FooBarFromJson(Map<String, dynamic> json) =>
_$_FooBar(
baz: json['baz'] as int,
);
Map<String, dynamic> _$$_FooBarToJson(_$_FooBar instance) =>
<String, dynamic>{
'baz': instance.baz,
};
Run Code Online (Sandbox Code Playgroud)
我的foobar.freezed.dart包含这个方法:
FooBar _$FooBarFromJson(Map<String, dynamic> json) {
return _FooBar.fromJson(json);
}
Run Code Online (Sandbox Code Playgroud)
我注意到转换的其他文件仅具有前缀为_$$_in的方法foobar.g.dart,而在和_$FooBarFromJson中创建,这是错误的原因。我在这里缺少什么?foobar.freezed.dartfoobar.g.dart
根据冻结问题中的以下注释以及包自述文件示例中所示,您需要@JsonSerializable(explicitToJson: true)按以下方式将其放置在类内部:
part 'foobar.freezed.dart';
part 'foobar.g.dart';
@freezed
@HiveType(typeId: 0)
class FooBar extends HiveObject with _$FooBar {
@JsonSerializable(explicitToJson: true) // <~~~ here
factory FooBar({
@HiveField(0) required int baz
}) = _FooBar;
factory FooBar.fromJson(Map<String, dynamic> json) =>
_$FooBarFromJson(json);
}
}
Run Code Online (Sandbox Code Playgroud)
您会注意到这会给您以下警告:
The annotation 'JsonSerializable' can only be used on classes
Run Code Online (Sandbox Code Playgroud)
这是一个已知问题/限制,维护者建议禁用该特定警告,如此处所述。
我相信另一种方法是在那里创建build.yaml和指定explicitToJson,但我在那里没有太多知识。
| 归档时间: |
|
| 查看次数: |
2609 次 |
| 最近记录: |