class RiwayatResponseModel { const RiwayatResponseModel({required this.child, required this.riwayat}); final ChildInfoModel child; final List riwayat; factory RiwayatResponseModel.fromJson(Map json) { final rawList = json['riwayat']; final items = rawList is List ? rawList .whereType>() .map(RiwayatItemModel.fromJson) .toList() : []; return RiwayatResponseModel( child: ChildInfoModel.fromJson( json['child'] as Map? ?? const {}, ), riwayat: items, ); } } class ChildInfoModel { const ChildInfoModel({ required this.id, required this.nama, required this.tanggalLahir, required this.jenisKelamin, this.photoUrl, }); final int id; final String nama; final String tanggalLahir; final String jenisKelamin; final String? photoUrl; factory ChildInfoModel.fromJson(Map json) { return ChildInfoModel( id: (json['id'] as num?)?.toInt() ?? 0, nama: json['nama'] as String? ?? '-', tanggalLahir: json['tanggal_lahir'] as String? ?? '-', jenisKelamin: json['jenis_kelamin'] as String? ?? '-', photoUrl: json['photo_url'] as String? ?? json['foto_url'] as String? ?? json['avatar_url'] as String?, ); } } class RiwayatKategoriModel { const RiwayatKategoriModel({ required this.bbu, required this.tbu, required this.bbtb, }); final String? bbu; final String? tbu; final String? bbtb; factory RiwayatKategoriModel.fromJson(Map json) { return RiwayatKategoriModel( bbu: json['bbu'] as String?, tbu: json['tbu'] as String?, bbtb: json['bbtb'] as String?, ); } } class RiwayatItemModel { const RiwayatItemModel({ required this.id, required this.berat, required this.tinggi, required this.tanggalUkur, required this.caraUkur, required this.umurBulan, required this.statusGabungan, required this.kategori, required this.zBbu, required this.zTbu, required this.zBbtb, }); final int id; final double berat; final double tinggi; final String tanggalUkur; final String? caraUkur; final double umurBulan; final String statusGabungan; final RiwayatKategoriModel kategori; final double? zBbu; final double? zTbu; final double? zBbtb; factory RiwayatItemModel.fromJson(Map json) { final z = json['z_score'] as Map? ?? const {}; final kategori = json['kategori'] as Map? ?? const {}; double? parseNullableNum(dynamic v) => v is num ? v.toDouble() : null; return RiwayatItemModel( id: (json['id'] as num?)?.toInt() ?? 0, berat: (json['berat'] as num?)?.toDouble() ?? double.nan, tinggi: (json['tinggi'] as num?)?.toDouble() ?? double.nan, tanggalUkur: json['tanggal_ukur'] as String? ?? '-', caraUkur: json['cara_ukur'] as String?, umurBulan: (json['umur_bulan'] as num?)?.toDouble() ?? double.nan, statusGabungan: json['status_gabungan'] as String? ?? '-', kategori: RiwayatKategoriModel.fromJson(kategori), zBbu: parseNullableNum(z['bbu']), zTbu: parseNullableNum(z['tbu']), zBbtb: parseNullableNum(z['bbtb']), ); } }