Files
floodwatch/lib/model/flood_station.dart

48 lines
1.4 KiB
Dart

class FloodStation {
final String id;
final String town;
final double lat;
final double long;
final DateTime? dateOpened;
final String catchmentName;
final String label;
final String riverName;
FloodStation({
required this.id,
required this.town,
required this.lat,
required this.long,
this.dateOpened,
required this.catchmentName,
required this.label,
required this.riverName,
});
factory FloodStation.fromMap(Map<String, dynamic> json) => FloodStation(
id: json['wiskiID'] ?? '',
town: json['town'] ?? '',
lat: parseDoubleValue(json['lat']),
long: parseDoubleValue(json['long']),
dateOpened: DateTime.tryParse(json['dateOpened'] ?? ''),
catchmentName: parseStringValue(json['catchmentName']),
label: parseStringValue(json['label']),
riverName: parseStringValue(json['riverName']),
);
// sometimes the API returns a String instead of a double
static double parseDoubleValue(dynamic value) {
if (value is double) return value;
if (value is String) return double.parse(value);
return 0;
}
// sometimes the API returns a list of labels that are basically identical
/// if [value] is a List, the method return the first item
static String parseStringValue(dynamic value) {
if (value is String) return value;
if (value is List<dynamic>) return value[0];
return '';
}
}