@JsonSerializable()
class BannerDetailModel extends BannerModel {
const BannerDetailModel({
...
required this.contents,
});
@_Converter()
final List<Contents> contents;
...
}
class _Converter implements JsonConverter<Contents, Object> {
const _Converter();
@override
Contents fromJson(Object json) {
if (json is Map<String, dynamic>) {
final type = json['type'];
if (...) {
return ImageContents.fromJson(json);
}
if (...) {
return ProductContents.fromJson(json);
}
}
throw Exception();
}
...
}
sealed class Contents {}
@JsonSerializable()
class ImageContents implements Contents {
const ImageContents({
...
});
...
factory ImageContents.fromJson(Map<String, dynamic> json) =>
_$ImageContentsFromJson(json);
}
@JsonSerializable()
class ProductContents implements Contents {
const ProductContents({
...
});
...
factory ProductContents.fromJson(Map<String, dynamic> json) =>
_$ProductContentsFromJson(json);
}