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