getCurrentLocation static method

Future<LatLng?> getCurrentLocation()

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