requestPermission method

Future<bool> requestPermission()

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;
}