diff --git a/android/app/build.gradle b/android/app/build.gradle
index 711ac01..61c4a3c 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -47,8 +47,9 @@ android {
applicationId "edu.furman.now"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
- minSdkVersion flutter.minSdkVersion
+ minSdkVersion 23
targetSdkVersion flutter.targetSdkVersion
+ compileSdkVersion 33
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 9da0164..c0bc049 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -34,4 +34,5 @@
+
diff --git a/lib/src/screens/map/index.dart b/lib/src/screens/map/index.dart
index e44c56c..c6d4283 100644
--- a/lib/src/screens/map/index.dart
+++ b/lib/src/screens/map/index.dart
@@ -1,5 +1,8 @@
+import 'dart:async';
+
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
+import 'package:flutter_map_location_marker/flutter_map_location_marker.dart';
import 'package:flutter_svg/svg.dart';
import 'package:furman_now/src/utils/theme.dart';
import 'package:furman_now/src/widgets/map/filter_chip.dart';
@@ -22,6 +25,9 @@ class _MapScreenState extends State
vsync: this,
);
+ late CenterOnLocationUpdate _centerOnLocationUpdate;
+ late StreamController _centerCurrentLocationStreamController;
+
var _rotation = 0.0;
@override
@@ -34,6 +40,8 @@ class _MapScreenState extends State
});
}
});
+ _centerOnLocationUpdate = CenterOnLocationUpdate.always;
+ _centerCurrentLocationStreamController = StreamController();
}
@override
@@ -89,6 +97,20 @@ class _MapScreenState extends State
zoom: 15,
minZoom: 12,
maxZoom: 18,
+ plugins: [
+ LocationMarkerPlugin(
+ centerCurrentLocationStream:
+ _centerCurrentLocationStreamController.stream,
+ centerOnLocationUpdate: _centerOnLocationUpdate,
+ ),
+ ],
+ onPositionChanged: (MapPosition position, bool hasGesture) {
+ if (hasGesture) {
+ setState(
+ () => _centerOnLocationUpdate = CenterOnLocationUpdate.never,
+ );
+ }
+ },
),
layers: [
TileLayerOptions(
@@ -96,6 +118,7 @@ class _MapScreenState extends State
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
userAgentPackageName: 'edu.furman.now',
),
+ LocationMarkerLayerOptions(),
],
nonRotatedChildren: [
AttributionWidget(
@@ -111,6 +134,7 @@ class _MapScreenState extends State
),
],
),
+ // Rotation reset fab
Positioned(
top: 12,
left: 0,
@@ -177,6 +201,24 @@ class _MapScreenState extends State
),
),
),
+ Positioned(
+ right: 20,
+ bottom: 20,
+ child: FloatingActionButton(
+ onPressed: () {
+ // Automatically center the location marker on the map when location updated until user interact with the map.
+ setState(
+ () => _centerOnLocationUpdate = CenterOnLocationUpdate.always,
+ );
+ // Center the location marker on the map and zoom the map to level 18.
+ _centerCurrentLocationStreamController.add(16);
+ },
+ child: const Icon(
+ Icons.my_location,
+ color: Colors.white,
+ ),
+ )
+ )
],
),
),
diff --git a/pubspec.lock b/pubspec.lock
index f6aab83..37fb60d 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -146,6 +146,13 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
+ flutter_compass:
+ dependency: transitive
+ description:
+ name: flutter_compass
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.7.0"
flutter_lints:
dependency: "direct dev"
description:
@@ -160,6 +167,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.0"
+ flutter_map_location_marker:
+ dependency: "direct main"
+ description:
+ name: flutter_map_location_marker
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "4.1.4"
flutter_svg:
dependency: "direct main"
description:
@@ -172,6 +186,11 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
+ flutter_web_plugins:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
frontend_server_client:
dependency: transitive
description:
@@ -179,6 +198,48 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.3"
+ geolocator:
+ dependency: transitive
+ description:
+ name: geolocator
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "9.0.1"
+ geolocator_android:
+ dependency: transitive
+ description:
+ name: geolocator_android
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "4.1.0"
+ geolocator_apple:
+ dependency: transitive
+ description:
+ name: geolocator_apple
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.2.1"
+ geolocator_platform_interface:
+ dependency: transitive
+ description:
+ name: geolocator_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "4.0.6"
+ geolocator_web:
+ dependency: transitive
+ description:
+ name: geolocator_web
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.1.6"
+ geolocator_windows:
+ dependency: transitive
+ description:
+ name: geolocator_windows
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.1"
glob:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index ee7aef3..7f68f31 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -48,6 +48,7 @@ dependencies:
palette_generator: ^0.3.3+2
flutter_svg: ^1.1.4
auto_route: ^5.0.1
+ flutter_map_location_marker: ^4.1.4
dev_dependencies:
flutter_test: