Skip to content

Commit

Permalink
Swapped tracking and mode switching buttons
Browse files Browse the repository at this point in the history
  • Loading branch information
Zverik committed May 8, 2022
1 parent 5af0a28 commit 562b1a0
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 33 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
_Unreleased_

* Made the saving button into a small floating one.
* Swapped tracking and mode changing buttons.
* Road names in address forms are also taken from highways.
* Combo options are now not limited to a preset list.
* Removed the setting for `contact:` prefixes.
Expand Down
41 changes: 9 additions & 32 deletions lib/screens/browser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import 'package:every_door/screens/settings/account.dart';
import 'package:every_door/screens/modes/entrances.dart';
import 'package:every_door/widgets/filter.dart';
import 'package:every_door/screens/modes/poi_list.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dropdown_alert/alert_controller.dart';
import 'package:flutter_dropdown_alert/model/data_alert.dart';
Expand Down Expand Up @@ -147,7 +148,7 @@ class _BrowserPageState extends ConsumerState<BrowserPage> {
},
child: Scaffold(
appBar: AppBar(
title: Text(kAppTitle),
title: Text(kAppTitle, overflow: TextOverflow.fade),
leading: IconButton(
onPressed: () {
Navigator.push(
Expand Down Expand Up @@ -207,39 +208,15 @@ class _BrowserPageState extends ConsumerState<BrowserPage> {
color: hasFilter ? Colors.yellowAccent : null,
),
),
if (!ref.watch(trackingProvider))
IconButton(
onPressed: ref.watch(trackingProvider)
? null
: () {
ref.read(trackingProvider.state).state = true;
},
icon: const Icon(Icons.my_location),
),
IconButton(
onPressed: () {
ref.read(editorModeProvider.notifier).next();
},
icon: Icon(kEditorModeIcons[editorMode]!),
),
],
),
body: Stack(children: [
editorPanel,
Positioned(
right: 0.0,
top: 10.0,
child: SafeArea(
child: ElevatedButton(
child:
Icon(kEditorModeIcons[kNextMode[editorMode]]!, size: 20.0),
style: ElevatedButton.styleFrom(
shape: CircleBorder(),
padding: EdgeInsets.all(10.0),
primary: Colors.grey.withOpacity(0.5),
shadowColor: Colors.black.withOpacity(0.5),
),
onPressed: () {
ref.read(editorModeProvider.notifier).next();
},
),
),
),
]),
body: editorPanel,
floatingActionButton: editorMode == EditorMode.poi ||
editorMode == EditorMode.micromapping
? FloatingActionButton(
Expand Down
9 changes: 9 additions & 0 deletions lib/screens/modes/entrances.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import 'package:every_door/screens/editor/entrance.dart';
import 'package:every_door/screens/editor/map_chooser.dart';
import 'package:every_door/widgets/map_drag_create.dart';
import 'package:every_door/widgets/multi_hit.dart';
import 'package:every_door/widgets/track_button.dart';
import 'package:every_door/widgets/zoom_buttons.dart';
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
Expand Down Expand Up @@ -335,6 +336,7 @@ class _EntrancesPaneState extends ConsumerState<EntrancesPane> {
MapDragCreatePlugin(),
MultiHitMarkerLayerPlugin(),
ZoomButtonsPlugin(),
TrackButtonPlugin(),
],
),
nonRotatedLayers: [
Expand Down Expand Up @@ -438,6 +440,13 @@ class _EntrancesPaneState extends ConsumerState<EntrancesPane> {
}),
],
),
TrackButtonOptions(
alignment: Alignment.topRight,
padding: EdgeInsets.symmetric(
horizontal: 10.0 + safePadding.right,
vertical: 20.0,
),
),
ZoomButtonsOptions(
alignment: Alignment.bottomRight,
padding: EdgeInsets.symmetric(
Expand Down
14 changes: 13 additions & 1 deletion lib/widgets/map.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ import 'package:every_door/providers/geolocation.dart';
import 'package:every_door/providers/imagery.dart';
import 'package:every_door/providers/editor_mode.dart';
import 'package:every_door/providers/legend.dart';
import 'package:every_door/widgets/track_button.dart';
import 'package:every_door/widgets/zoom_buttons.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart';
Expand Down Expand Up @@ -254,9 +256,19 @@ class _AmenityMapState extends ConsumerState<AmenityMap> {
interactiveFlags: ref.watch(microZoomedInProvider) != null
? InteractiveFlag.none
: (InteractiveFlag.drag | InteractiveFlag.pinchZoom),
plugins: [ZoomButtonsPlugin()],
plugins: [
ZoomButtonsPlugin(),
TrackButtonPlugin(),
],
),
nonRotatedLayers: [
TrackButtonOptions(
alignment: Alignment.topRight,
padding: EdgeInsets.symmetric(
horizontal: 0.0,
vertical: 20.0,
),
),
if (widget.drawZoomButtons)
ZoomButtonsOptions(
alignment: Alignment.bottomRight,
Expand Down
69 changes: 69 additions & 0 deletions lib/widgets/track_button.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import 'package:every_door/providers/geolocation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_map/plugin_api.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

class TrackButtonOptions extends LayerOptions {
final EdgeInsets padding;
final Alignment alignment;

TrackButtonOptions({
Key? key,
Stream<Null>? rebuild,
this.alignment = Alignment.topRight,
required this.padding,
}) : super(key: key, rebuild: rebuild);
}

class TrackButtonPlugin implements MapPlugin {
@override
Widget createLayer(
LayerOptions options, MapState mapState, Stream<Null> stream) {
if (options is TrackButtonOptions) {
return TrackButtonLayer(options);
}
throw Exception(
'Wrong options for TrackButtonPlugin: ${options.runtimeType}');
}

@override
bool supportsLayer(LayerOptions options) => options is TrackButtonOptions;
}

class TrackButtonLayer extends ConsumerWidget {
final TrackButtonOptions _options;

const TrackButtonLayer(this._options);

@override
Widget build(BuildContext context, WidgetRef ref) {
if (ref.watch(trackingProvider)) return Container();

return Positioned(
top: 0.0,
right: _options.alignment.x >= 0 ? 0.0 : null,
left: _options.alignment.x < 0 ? 0.0 : null,
child: Padding(
padding: _options.padding,
child: OutlinedButton(
onPressed: () {
ref.read(trackingProvider.state).state = true;
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Icon(
Icons.my_location,
size: 30.0,
color: Colors.black.withOpacity(0.5),
),
),
style: OutlinedButton.styleFrom(
backgroundColor: Colors.white.withOpacity(0.5),
shape: CircleBorder(side: BorderSide()),
padding: EdgeInsets.zero,
),
),
),
);
}
}

0 comments on commit 562b1a0

Please sign in to comment.