@Freezed(toJson: false)
abstract class ApiError with _$ApiError {
const factory ApiError({
required String code,
required String message,
@JsonKey(readValue: _readExtraJson) Map<String, dynamic>? extra,
}) = _ApiError;
const ApiError._();
factory ApiError.fromJson(Map<String, dynamic> json) =>
_$ApiErrorFromJson(json);
/// カスタム `toJson` の実装(元のJSONの形に復元)
Map<String, dynamic> toJson() {
return {
'code': code,
'message': message,
if (extra != null) ...extra!,
};
}
}
/// `extra` に元のJSONマップ全体を取り込むための readValue
Object? _readExtraJson(Map<dynamic, dynamic> json, String key) {
final extra = Map<String, dynamic>.from(json)
..remove('code')
..remove('message');
return extra.isEmpty ? null : extra;
}