Files
CityCards_Customer_Flutter/lib/home/model/city_selection_model.dart
2026-02-13 15:27:14 +05:30

101 lines
2.2 KiB
Dart

class CitySelectionResponse {
final List<CitySelection> cities;
CitySelectionResponse({required this.cities});
factory CitySelectionResponse.fromJson(Map<String, dynamic> json) {
return CitySelectionResponse(
cities: (json['cities'] as List<dynamic>?)
?.map((city) =>
CitySelection.fromJson(city as Map<String, dynamic>))
.toList() ??
[],
);
}
Map<String, dynamic> toJson() {
return {
'cities': cities.map((city) => city.toJson()).toList(),
};
}
}
class CitySelection {
// 🔹 EXISTING FIELDS (UNCHANGED)
final int id;
final String cityName;
final String bannerImage;
// 🔹 NEW FIELDS (ADDED ONLY)
final String cityIconPath;
final CityIcon? icon;
CitySelection({
required this.id,
required this.cityName,
required this.bannerImage,
// 🔹 ADDED
required this.cityIconPath,
required this.icon,
});
factory CitySelection.fromJson(Map<String, dynamic> json) {
return CitySelection(
// 🔹 EXISTING
id: json['id'] as int? ?? 0,
cityName: json['cityName'] as String? ?? '',
bannerImage: json['bannerImage'] as String? ?? '',
// 🔹 ADDED
cityIconPath: json['cityIconPath'] as String? ?? '',
icon: json['icon'] != null
? CityIcon.fromJson(json['icon'] as Map<String, dynamic>)
: null,
);
}
Map<String, dynamic> toJson() {
return {
// 🔹 EXISTING
'id': id,
'cityName': cityName,
'bannerImage': bannerImage,
// 🔹 ADDED
'cityIconPath': cityIconPath,
'icon': icon?.toJson(),
};
}
// 🔹 EXISTING METHODS (UNCHANGED)
String getImageUrl() {
if (bannerImage.isEmpty || !bannerImage.startsWith('http')) {
return 'assets/images/card_banner.png';
}
return bannerImage;
}
bool isNetworkImage() {
return bannerImage.isNotEmpty && bannerImage.startsWith('http');
}
}
// 🔹 NEW MODEL (REQUIRED FOR icon.svg)
class CityIcon {
final String svg;
CityIcon({required this.svg});
factory CityIcon.fromJson(Map<String, dynamic> json) {
return CityIcon(
svg: json['svg'] as String? ?? '',
);
}
Map<String, dynamic> toJson() {
return {
'svg': svg,
};
}
}