getCurrentLocation static method
Get current user location with detailed error information. Returns LocationResult with location or error message.
Implementation
static Future<LocationResult> getCurrentLocation() async {
try {
// Check if location services are enabled.
bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
return LocationResult.error(
'Location services are disabled. Please enable location in your device settings.',
);
}
// Check permission.
LocationPermission permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
return LocationResult.error(
'Location permission denied. Please allow location access in your browser or device settings.',
);
}
}
if (permission == LocationPermission.deniedForever) {
return LocationResult.error(
'Location permission permanently denied. Please enable location access in your browser or device settings.',
);
}
// Get current position with platform-specific settings.
Position position = await Geolocator.getCurrentPosition(
locationSettings: kIsWeb
? const LocationSettings(
accuracy: LocationAccuracy.high,
timeLimit: Duration(seconds: 15),
)
: const LocationSettings(
accuracy: LocationAccuracy.high,
timeLimit: Duration(seconds: 10),
),
);
return LocationResult.success(
LatLng(position.latitude, position.longitude),
);
} on PermissionDeniedException {
return LocationResult.error(
'Location permission denied. Please allow location access.',
);
} on TimeoutException {
return LocationResult.error(
'Location request timed out. Please check your GPS signal and try again.',
);
} catch (e) {
// Check for specific error messages.
final errorStr = e.toString().toLowerCase();
if (errorStr.contains('location') && errorStr.contains('disabled')) {
return LocationResult.error(
'Location services are disabled. Please enable location in your device settings.',
);
}
return LocationResult.error('Unable to get location: ${e.toString()}');
}
}