gpt4 book ai didi

flutter - 用于由 dart 中的卡住包生成的联合的 JsonConverter

转载 作者:行者123 更新时间:2023-12-04 11:48:03 25 4
gpt4 key购买 nike

我正在尝试为 freezed package 生成的联合实现 toJson/fromJson .假设我们有一个类,如下所示:

@freezed
abstract class Result with _$Result {
const factory Result.error(String message) = Error;
const factory Result.success() = Success;

factory Result.fromJson(Map<String, dynamic> json) => _$ResultFromJson(json);
}

我想要/fromJson 的行为如下:
 Result error = Result.error('some error');
expect(error.toJson(), {'type': 'error', 'message': 'some error'});
expect(Result.fromJson({'type': 'error', 'message': 'some error'}), error);

文档中说明您可以使用 JsonConverter (fromJSON with multiple classes)但我不知道如何正确使用它。
class ResultConverter implements JsonConverter<Result, Map<String, dynamic>> {
const ResultConverter();

@override
Result fromJson(Map<String, dynamic> json) {
if (json == null) {
return null;
}
switch (json['type'] as String) {
case 'success':
return Success.fromJson(json);
case 'error':
return Error.fromJson(json);

default:
throw FallThroughError();
}
}

@override
Map<String, dynamic> toJson(Result object) => object.map(
error: (e) => {'type': 'error', ...e.toJson()},
success: (s) => {'type': 'success', ...s.toJson()},
);
}
fromJson如果工厂方法调用 ResultConverter().fromJson(this) 工作正常而不是生成的,但这感觉像是一种解决方法,不适用于 toJson。

是否可以以某种方式注释 Result 类,以便代码生成将使用转换器?

最佳答案

你可以只使用你的转换器。
尝试这个:

final result = ResultConverter().fromJson(json);

关于flutter - 用于由 dart 中的卡住包生成的联合的 JsonConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62437817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com