fetchCurrentLocation static method

Future<LatLng?> fetchCurrentLocation()

Implementation

static Future<LatLng?> fetchCurrentLocation() async {

  /// get current location
  if (!(await permissionUtils.getLocationPermission())) {
    debugPrint("------> Permission denied ");
    bool isPermanentlyDenied = await Permission.location.isPermanentlyDenied;
    bool? isLocationEnabled = await Permission.locationWhenInUse.serviceStatus.isEnabled;

    if(isPermanentlyDenied) {
      await picker.permissionDeniedDialogue();
      return null;
    } else if(!isLocationEnabled){
      debugPrint("------> Location service denied ");
      bool locationEnabled = await loc.Location().requestService();
      if(!locationEnabled) {
        bool? locEnabled = await Permission.locationWhenInUse.serviceStatus.isEnabled;
        if(!locEnabled) {
          return null;
        }
      }
    }
    return null;
  } else {
    bool? isLocationEnabled = await Permission.locationWhenInUse.serviceStatus.isEnabled;
    if(!isLocationEnabled) {
      debugPrint("------> Location service denied ");
      bool locationEnabled = await loc.Location().requestService();
      if(!locationEnabled) {
        bool? locEnabled = await Permission.locationWhenInUse.serviceStatus.isEnabled;
        if(!locEnabled) {
          return null;
        }
      }
    }
  }
  try {
    Position? position = await Geolocator.getLastKnownPosition(
      forceAndroidLocationManager: true,
    );

    position ??= await Geolocator.getCurrentPosition(
      locationSettings: const LocationSettings(
        accuracy: LocationAccuracy.high, // Choose appropriate accuracy
        distanceFilter: 10,
      ),
    );
    return LatLng(position.latitude, position.longitude);
  } catch (e) {
    debugPrint(e.toString());
    handleError(e);
    return null;
  }
}