requestPermission method
Checks and requests location permission. Returns true if permission is granted.
Implementation
Future<bool> requestPermission() async {
bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
debugPrint('PowerMap Tracking: Location services are disabled.');
return false;
}
LocationPermission permission = await Geolocator.checkPermission();
bool wasDenied = permission == LocationPermission.denied || permission == LocationPermission.deniedForever;
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
debugPrint('PowerMap Tracking: Location permissions denied.');
return false;
}
}
if (permission == LocationPermission.deniedForever) {
debugPrint('PowerMap Tracking: Location permissions permanently denied.');
return false;
}
// Force map to redraw user location if permission was just granted.
// MapLibre fails silently if map loads without permission initially.
if (wasDenied && isUserLocationVisible.value) {
isUserLocationVisible.value = false;
Future.delayed(const Duration(milliseconds: 200), () {
isUserLocationVisible.value = true;
});
}
return true;
}