getCurrentLocationFromGeoLocator static method

Future<LatLng> getCurrentLocationFromGeoLocator({
  1. LocationAccuracy desiredAccuracy = geo.LocationAccuracy.low,
  2. bool isAllowApproximate = false,
  3. bool dontShowMsg = false,
})

Implementation

static Future<LatLng> getCurrentLocationFromGeoLocator({
  geo.LocationAccuracy desiredAccuracy = geo.LocationAccuracy.low,
  bool isAllowApproximate = false,
  bool dontShowMsg = false,
}) async {
  final Localization localization = Localization.getInstance();
  var latitude = 0.0; // to check whether precise location granted or not
  var longitude = 0.0;
  try {
    Location location = Location();

    bool serviceEnabled;
    PermissionStatus permissionGranted;

    serviceEnabled = await location.serviceEnabled();
    if (!serviceEnabled) {
      serviceEnabled = await location.requestService();
      if (!serviceEnabled && !dontShowMsg) {
        Get.showSnackbar(
          GetSnackBar(
            isDismissible: false,
            title: localization.translate("locationServiceDisabled"),
            message: localization.translate("locationServiceDisabledMsg"),
            duration: const Duration(seconds: 5),
            mainButton: TextButton(
              onPressed: () {
                perm.openAppSettings();
              },
              child: Text(localization.translate("openSettings")),
            ),
          ),
        );
        return LatLng(latitude, longitude);
      }
    }

    permissionGranted = await location.hasPermission();
    ConditionalLogs().customLog("Service ->>> $permissionGranted");
    if (permissionGranted == PermissionStatus.denied) {
      permissionGranted = await location.requestPermission();
      if (permissionGranted != PermissionStatus.granted && !dontShowMsg) {
        Get.showSnackbar(
          GetSnackBar(
            title: localization.translate("permissionDenied"),
            message: localization.translate("locationEnableMsg"),
            duration: const Duration(seconds: 5),
            mainButton: TextButton(
              onPressed: () {
                perm.openAppSettings();
              },
              child: Text(localization.translate("openSettings")),
            ),
          ),
        );
        return LatLng(latitude, longitude);
      }
    }

    var accuracy = await geo.Geolocator.getLocationAccuracy();

    if (accuracy == geo.LocationAccuracyStatus.precise) {
      var position = await geo.Geolocator.getCurrentPosition(
          desiredAccuracy: desiredAccuracy);
      latitude = position.latitude;
      longitude = position.longitude;
    }
    ConditionalLogs().customLog("Current lat lang:$latitude  $longitude");
    if (accuracy != geo.LocationAccuracyStatus.precise) {
      if (isAllowApproximate) {
        var position = await geo.Geolocator.getLastKnownPosition();
        if (position != null) {
          latitude = position.latitude;
          longitude = position.longitude;
        }
      }
      ConditionalLogs()
          .customLog("Last known lat lang:$latitude  $longitude");
      if (!dontShowMsg) {
        Get.showSnackbar(
          GetSnackBar(
            title: localization.translate('currentLocationError'),
            message: localization.translate('preciseLocationError'),
            duration: const Duration(seconds: 5),
          ),
        );
      }
    }
    return LatLng(latitude, longitude);
  } catch (error) {
    ConditionalLogs()
        .customLog("error catch getCurrentLocationFromGeoLocator");
    ConditionalLogs().customLog("error : $error");
    if (!dontShowMsg) {
      Get.showSnackbar(
        GetSnackBar(
          title: localization.translate('error'),
          message: "$error", //localization.translate('technicalErrorMsg'),
          duration: const Duration(seconds: 5),
        ),
      );
    }
    return LatLng(latitude, longitude);
  }
}