getCurrentLocation static method
Fetch current user location with timeout and retry logic
Implementation
static Future<LatLng?> getCurrentLocation() async {
try {
// Check permission first
final permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied ||
permission == LocationPermission.deniedForever) {
print('Location permission not granted');
return null;
}
// Get current position with timeout
try {
final position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high,
timeLimit: const Duration(seconds: 10),
).timeout(
const Duration(seconds: 15),
onTimeout: () => throw TimeoutException('Location fetch timeout'),
);
print('Position fetched - Lat: ${position.latitude}, Lng: ${position.longitude}');
return LatLng(position.latitude, position.longitude);
} on TimeoutException {
print('Error: Location fetch timeout. Trying with longer timeout...');
// Try again with longer timeout
final position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.medium,
timeLimit: const Duration(seconds: 30),
);
print('Position fetched (retry) - Lat: ${position.latitude}, Lng: ${position.longitude}');
return LatLng(position.latitude, position.longitude);
}
} catch (e) {
print('Error getting current location: $e');
return null;
}
}