requestPermission method

Future<LocationPermissionStatus> requestPermission({
  1. bool requestBackgroundPermission = false,
})

Request location permission

Implementation

Future<LocationPermissionStatus> requestPermission({
  bool requestBackgroundPermission = false,
}) async {
  try {
    // First check if location service is enabled
    final serviceEnabled = await isLocationServiceEnabled();
    if (!serviceEnabled) {
      _errorController.add('Location services are disabled');
      return LocationPermissionStatus.denied;
    }

    // Request foreground permission
    geo.LocationPermission permission = await geo.Geolocator.requestPermission();

    if (permission == geo.LocationPermission.denied) {
      return LocationPermissionStatus.denied;
    }

    if (permission == geo.LocationPermission.deniedForever) {
      return LocationPermissionStatus.deniedForever;
    }

    // If background permission is requested (Android 10+)
    if (requestBackgroundPermission && defaultTargetPlatform == TargetPlatform.android) {
      final backgroundStatus = await Permission.locationAlways.request();

      if (backgroundStatus.isGranted) {
        return LocationPermissionStatus.always;
      } else if (backgroundStatus.isPermanentlyDenied) {
        return LocationPermissionStatus.deniedForever;
      }
    }

    return _convertGeolocatorPermission(permission);
  } catch (e) {
    _errorController.add('Failed to request permission: $e');
    return LocationPermissionStatus.denied;
  }
}