From 123a9b000c4962e54f23918f91da11e4b4d21d71 Mon Sep 17 00:00:00 2001 From: Sorunome Date: Mon, 29 Nov 2021 16:04:23 +0100 Subject: [PATCH] fix: Properly position the pointer in the map bubble and add attribution Prior the pointer in the map bubble wasn't offsetted upwards, so the center of the icon marked the point, rather than the point of the icon as one would expect. Additionally, attribution to the OpenStreetMap project has been added. --- lib/pages/chat/events/map_bubble.dart | 66 +++++++++++++++++++-------- 1 file changed, 47 insertions(+), 19 deletions(-) diff --git a/lib/pages/chat/events/map_bubble.dart b/lib/pages/chat/events/map_bubble.dart index 94e15a74..47aede77 100644 --- a/lib/pages/chat/events/map_bubble.dart +++ b/lib/pages/chat/events/map_bubble.dart @@ -28,28 +28,56 @@ class MapBubble extends StatelessWidget { constraints: BoxConstraints.loose(Size(width, height)), child: AspectRatio( aspectRatio: width / height, - child: FlutterMap( - options: MapOptions( - center: LatLng(latitude, longitude), - zoom: zoom, - ), - layers: [ - TileLayerOptions( - urlTemplate: - 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - subdomains: ['a', 'b', 'c'], - ), - MarkerLayerOptions( - markers: [ - Marker( - point: LatLng(latitude, longitude), - builder: (context) => const Icon( - Icons.location_pin, - color: Colors.red, - ), + child: Stack( + children: [ + FlutterMap( + options: MapOptions( + center: LatLng(latitude, longitude), + zoom: zoom, + ), + layers: [ + TileLayerOptions( + urlTemplate: + 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + subdomains: ['a', 'b', 'c'], + ), + MarkerLayerOptions( + rotate: true, + markers: [ + Marker( + point: LatLng(latitude, longitude), + width: 30, + height: 30, + builder: (_) => Transform.translate( + // No idea why the offset has to be like this, instead of -15 + // It has been determined by trying out, though, that this yields + // the tip of the location pin to be static when zooming. + // Might have to do with psychological perception of where the tip exactly is + offset: const Offset(0, -12.5), + child: const Icon( + Icons.location_pin, + color: Colors.red, + size: 30, + ), + ), + ), + ], ), ], ), + Container( + alignment: Alignment.bottomRight, + child: Text( + ' © OpenStreetMap contributors ', + style: TextStyle( + color: Theme.of(context).brightness == Brightness.dark + ? Colors.white + : Colors.black, + backgroundColor: + Theme.of(context).appBarTheme.backgroundColor, + ), + ), + ), ], ), ),