※追記 後で気づいたのですがやりたい事と違うようですね。この回答は削除するかもしれません。ただ結局カスタムな変換する場合がJsonConverterを書くことになると思います。Testクラス自体をその手前で変換する必要があるかもしれませんね。
JSONから読み込むタイミングでカスタムな処理したい場合はJsonConverterを書くことをおすすめします。カスタムな相互変換(Json↔Object)処理をかけますし、エラーもthrowできます。厳密にはFreezedではなくてJsonSerializableの仕様となります。
このコードは検証していなくて記憶から書いているので間違っていたらすみません。
雰囲気はわかると思います。
dart
1@freezed
2abstract class Test with _$Test {
3 factory Test({
4 @MyStatusConverter() required MyStatus status,
5 /* @TotalResultsConverter() */ required int totalResults,
6 required List<Hoge> hoges,
7 }) = _Test;
8
9 factory Test.fromJson(Map<String, dynamic> json) => _$TestFromJson(json);
10}
dart
1class MyStatus {
2 final statusString;
3 const MyStatus(this.statusString);
4 // ...
5}
dart
1class MyConvertError implements Exception {
2 //...
3}
4
5class MyStatusConverter implements JsonConverter<MyStatus, String> {
6 const MyStatusConverter();
7
8 @override
9 MyStatus fromJson(String json) {
10 if ( /* チェック処理 */ ) throw MyConvertError();
11 return MyStatus(json);
12 }
13
14 //
15 @override
16 String toJson(MyStatus object) => object.statusString;
17}
JsonConverterの書き方のサンプルは公式にもありますね。
https://github.com/google/json_serializable.dart/blob/master/example/lib/json_converter_example.dart
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/07 22:54