From 08c266bc95ce1487290576c2cb9d9a3f6b6f82df Mon Sep 17 00:00:00 2001 From: marco Date: Fri, 24 Jan 2025 23:06:53 +0100 Subject: [PATCH] more detailed flood station info --- lib/Widgets/flood_station_list_view.dart | 24 ++++++++++++++++++ lib/model/flood_station.dart | 32 +++++++++++++++++++++--- lib/pages/landing_page.dart | 14 ++++------- 3 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 lib/Widgets/flood_station_list_view.dart diff --git a/lib/Widgets/flood_station_list_view.dart b/lib/Widgets/flood_station_list_view.dart new file mode 100644 index 0000000..fd8d407 --- /dev/null +++ b/lib/Widgets/flood_station_list_view.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; + +import '../model/flood_station.dart'; + +class FloodStationListView extends StatelessWidget { + const FloodStationListView({super.key, required List stations}) + : _stations = stations; + + final List _stations; + + @override + Widget build(BuildContext context) { + return ListView.builder( + itemBuilder: (context, index) { + final item = _stations.elementAt(index); + return ListTile( + title: Text(item.label), + subtitle: Text(item.town), + ); + }, + itemCount: _stations.length, + ); + } +} diff --git a/lib/model/flood_station.dart b/lib/model/flood_station.dart index 06a78c1..a391ae3 100644 --- a/lib/model/flood_station.dart +++ b/lib/model/flood_station.dart @@ -1,17 +1,41 @@ class FloodStation { final String id; final String town; - final double? latestReading; + final double lat; + final double long; + final DateTime? dateOpened; + final String catchmentName; + final String label; FloodStation({ required this.id, required this.town, - this.latestReading, + required this.lat, + required this.long, + this.dateOpened, + required this.catchmentName, + required this.label, }); factory FloodStation.fromMap(Map json) => FloodStation( - id: json['@id'] ?? '', + id: json['wiskiID'] ?? '', town: json['town'] ?? '', - latestReading: double.tryParse(json['latestReading']?.toString() ?? ''), + lat: parseDoubleValue(json['lat']), + long: parseDoubleValue(json['long']), + dateOpened: DateTime.tryParse(json['dateOpened'] ?? ''), + catchmentName: parseStringValue(json['catchmentName']), + label: parseStringValue(json['label']), ); + + static double parseDoubleValue(dynamic value) { + if (value is double) return value; + if (value is String) return double.parse(value); + return 0; + } + + static String parseStringValue(dynamic value) { + if (value is String) return value; + if (value is List) return value[0]; + return ''; + } } diff --git a/lib/pages/landing_page.dart b/lib/pages/landing_page.dart index 64cfd61..2684e6c 100644 --- a/lib/pages/landing_page.dart +++ b/lib/pages/landing_page.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; +import '../Widgets/flood_station_list_view.dart'; import '../model/flood_station.dart'; import '../services/api.dart'; @@ -13,16 +14,11 @@ class LandingPage extends StatelessWidget { if (!snapshot.hasData) { return CircularProgressIndicator(); } else if (snapshot.hasData) { - return ListView.builder( - itemBuilder: (context, index) { - return ListTile( - title: Text(snapshot.data!.elementAt(index).town), - ); - }, - itemCount: snapshot.data!.length, - ); + return FloodStationListView(stations: snapshot.data!); + } else if (snapshot.hasError) { + return Text(snapshot.error.toString()); } else { - return Placeholder(); + return Text('An unknown error occured.'); } }