From 2f36f914ae5a69eecc43f66714b95818d145075d Mon Sep 17 00:00:00 2001 From: Guilherme Cabral Date: Tue, 11 Jun 2019 13:35:11 +0100 Subject: [PATCH] satellite view on the map. fixes #61 --- lib/middleware/preferences_middleware.dart | 1 + lib/screens/home_page.dart | 62 +++++++++++++++++++++- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/lib/middleware/preferences_middleware.dart b/lib/middleware/preferences_middleware.dart index 709c27a..1db8416 100644 --- a/lib/middleware/preferences_middleware.dart +++ b/lib/middleware/preferences_middleware.dart @@ -55,6 +55,7 @@ Middleware _createLoadPreferences() { data['pref-important'] = prefs.getInt('important') ?? 0; data['pref-warnings'] = prefs.getInt('warnings') ?? 0; + data['pref-satellite'] = prefs.getInt('satellite') ?? 0; store.dispatch(new AllPreferencesLoadedAction(data)); store.dispatch(new SavedFireFiltersAction(saveFilters)); diff --git a/lib/screens/home_page.dart b/lib/screens/home_page.dart index 5793031..e16467e 100644 --- a/lib/screens/home_page.dart +++ b/lib/screens/home_page.dart @@ -3,6 +3,7 @@ import 'package:flutter_map/flutter_map.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:fogosmobile/actions/fires_actions.dart'; +import 'package:fogosmobile/actions/preferences_actions.dart'; import 'package:fogosmobile/localization/fogos_localizations.dart'; import 'package:fogosmobile/models/app_state.dart'; import 'package:fogosmobile/models/fire.dart'; @@ -136,9 +137,50 @@ class HomePage extends StatelessWidget { } } + Widget _getSatelliteButton(state, context) { + List widgets = [ + IconButton( + icon: Icon(Icons.satellite), + onPressed: () { + final store = StoreProvider.of(context); + store.dispatch(SetPreferenceAction('satellite', state.preferences['pref-satellite'] == 1 ? 0 : 1)); + }, + ), + ]; + + if (state.preferences['pref-satellite'] == 1) { + widgets.add( + Positioned( + bottom: 5, + right: 5, + child: Icon( + Icons.check_circle, + size: 18, + color: Colors.green, + ), + ) + ); + } + + return Stack( + children: widgets, + ); + } + return StoreConnector( converter: (Store store) => store.state, builder: (BuildContext context, AppState state) { + String mapboxUrlTemplate; + String mapboxId; + + if (state.preferences['pref-satellite'] == 1) { + mapboxUrlTemplate = MAPBOX_URL_SATTELITE_TEMPLATE; + mapboxId = MAPBOX_SATTELITE_ID; + } else { + mapboxUrlTemplate = MAPBOX_URL_TEMPLATE; + mapboxId = MAPBOX_ID; + } + return ModalProgressHUD( opacity: 0.75, color: Colors.black, @@ -155,10 +197,10 @@ class HomePage extends StatelessWidget { ), layers: [ new TileLayerOptions( - urlTemplate: MAPBOX_URL_TEMPLATE, + urlTemplate: mapboxUrlTemplate, additionalOptions: { 'accessToken': MAPBOX_ACCESS_TOKEN, - 'id': MAPBOX_ID, + 'id': mapboxId, }, ), new MarkerLayerOptions( @@ -167,6 +209,22 @@ class HomePage extends StatelessWidget { ], ), MapboxCopyright(), + Positioned( + right: 0.0, + top: 0.0, + child: SafeArea( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.only(bottomLeft: Radius.circular(14.0)), + color: Colors.white54, + ), + child: Padding( + padding: const EdgeInsets.all(4.0), + child: _getSatelliteButton(state, context), + ), + ), + ), + ) ], ), );