From 9c9992919d41f98ab73c253bdd8843cd994c6b55 Mon Sep 17 00:00:00 2001 From: marco Date: Tue, 28 Jan 2025 15:23:16 +0100 Subject: [PATCH] Simple NavigationBar and placeholder map view --- lib/main.dart | 5 +- lib/pages/landing_page.dart | 84 ++++++++++++------------- lib/pages/main_navigation_scaffold.dart | 41 ++++++++++++ lib/pages/map_page.dart | 11 ++++ pubspec.yaml | 1 + 5 files changed, 95 insertions(+), 47 deletions(-) create mode 100644 lib/pages/main_navigation_scaffold.dart create mode 100644 lib/pages/map_page.dart diff --git a/lib/main.dart b/lib/main.dart index 559969a..49ef465 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,6 +3,7 @@ import 'package:provider/provider.dart'; import 'pages/flood_station_page.dart'; import 'pages/landing_page.dart'; +import 'pages/main_navigation_scaffold.dart'; import 'services/flood_station_provider.dart'; import 'package:timezone/data/latest.dart' as tz; @@ -27,9 +28,9 @@ class MyApp extends StatelessWidget { colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), - initialRoute: LandingPage.routeName, + initialRoute: MainNavigationScaffold.routeName, routes: { - LandingPage.routeName: (context) => LandingPage(), + MainNavigationScaffold.routeName: (context) => MainNavigationScaffold(), FloodStationPage.routeName: (context) => FloodStationPage(), }, ); diff --git a/lib/pages/landing_page.dart b/lib/pages/landing_page.dart index 348a5e8..da60de3 100644 --- a/lib/pages/landing_page.dart +++ b/lib/pages/landing_page.dart @@ -10,8 +10,6 @@ import 'flood_station_page.dart'; class LandingPage extends StatefulWidget { const LandingPage({super.key}); - static const routeName = '/'; - @override State createState() => _LandingPageState(); } @@ -24,52 +22,48 @@ class _LandingPageState extends State { @override Widget build(BuildContext context) { floodStationProvider = context.watch(); - return Scaffold( - body: Column( - children: [ - StationFilter( - onChanged: (filterText) { - if (filterText.isEmpty) { - floodStationProvider.filtered = false; - setState(() {}); - return; - } - showLoadingNotifier(context: context, message: 'Loading'); - floodStationProvider.loadFilteredStations(filterText); - floodStationProvider.filteredStationsFuture - ?.then((_) => removeLoadingNotifier()); - floodStationProvider.filtered = true; - }, - ), - _shouldShowList() - ? Expanded( - child: FloodStationListView( - stations: floodStationProvider.filtered - ? floodStationProvider.filteredStations - : floodStationProvider.allStations, - onItemTapped: (station) { - floodStationProvider.selectedStation = station; - Navigator.of(context) - .pushNamed(FloodStationPage.routeName); + return Column( + children: [ + StationFilter( + onChanged: (filterText) { + if (filterText.isEmpty) { + floodStationProvider.filtered = false; + setState(() {}); + return; + } + showLoadingNotifier(context: context, message: 'Loading'); + floodStationProvider.loadFilteredStations(filterText); + floodStationProvider.filteredStationsFuture + ?.then((_) => removeLoadingNotifier()); + floodStationProvider.filtered = true; + }, + ), + _shouldShowList() + ? Expanded( + child: FloodStationListView( + stations: floodStationProvider.filtered + ? floodStationProvider.filteredStations + : floodStationProvider.allStations, + onItemTapped: (station) { + floodStationProvider.selectedStation = station; + Navigator.of(context).pushNamed(FloodStationPage.routeName); + }, + ), + ) + : Expanded( + child: Center( + child: ElevatedButton( + onPressed: () { + showLoadingNotifier(context: context, message: 'Loading'); + floodStationProvider + .loadAllStations() + .whenComplete(() => removeLoadingNotifier()); }, - ), - ) - : Expanded( - child: Center( - child: ElevatedButton( - onPressed: () { - showLoadingNotifier( - context: context, message: 'Loading'); - floodStationProvider - .loadAllStations() - .whenComplete(() => removeLoadingNotifier()); - }, - child: Text('Load all Stations'), - ), + child: Text('Load all Stations'), ), ), - ], - ), + ), + ], ); } diff --git a/lib/pages/main_navigation_scaffold.dart b/lib/pages/main_navigation_scaffold.dart new file mode 100644 index 0000000..b14f9aa --- /dev/null +++ b/lib/pages/main_navigation_scaffold.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; + +import 'landing_page.dart'; +import 'map_page.dart'; + +class MainNavigationScaffold extends StatefulWidget { + const MainNavigationScaffold({super.key}); + static const routeName = '/'; + + @override + State createState() => _MainNavigationScaffoldState(); +} + +class _MainNavigationScaffoldState extends State { + int _selectedPageIndex = 0; + + final List _pages = [ + const LandingPage(), + const MapPage(), + ]; + + @override + Widget build(BuildContext context) { + return Scaffold( + bottomNavigationBar: NavigationBar( + selectedIndex: _selectedPageIndex, + onDestinationSelected: (value) => setState(() { + _selectedPageIndex = value; + }), + destinations: [ + NavigationDestination(icon: Icon(Icons.list), label: 'List'), + NavigationDestination(icon: Icon(Icons.map_outlined), label: 'Map'), + ], + ), + body: IndexedStack( + index: _selectedPageIndex, + children: _pages, + ), + ); + } +} diff --git a/lib/pages/map_page.dart b/lib/pages/map_page.dart new file mode 100644 index 0000000..3f4ac10 --- /dev/null +++ b/lib/pages/map_page.dart @@ -0,0 +1,11 @@ +import 'package:flutter/material.dart'; + +class MapPage extends StatelessWidget { + const MapPage({super.key}); + static const routeName = '/map'; + + @override + Widget build(BuildContext context) { + return const Placeholder(); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index a938642..b722710 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,6 +17,7 @@ dependencies: provider: ^6.1.2 timezone: ^0.10.0 async: ^2.11.0 + flutter_osm_plugin: ^1.3.6 dev_dependencies: flutter_test: