locationsPermission static method

Future<String> locationsPermission(
  1. RxBool isLocationEnable,
  2. RxDouble lat,
  3. RxDouble long,
  4. RxString address,
)

Implementation

/// For ios add these lines in infoplist files

///    <key>NSLocationWhenInUseUsageDescription</key>
///    <string>This app needs access to location when open.</string>
///     <key>NSLocationAlwaysUsageDescription</key>
///    <string>This app needs access to location when in the background.</string>
///

static Future<String> locationsPermission(
  RxBool isLocationEnable,
  RxDouble lat,
  RxDouble long,
  RxString address,
) async {
  LocationPermission? permission;
  bool serviceEnabled;
  serviceEnabled = await Geolocator.isLocationServiceEnabled();
  if (!serviceEnabled) {
    isLocationEnable.value = false;
    CommonWidgets.toast(message: pleaseEnableLocationsStr);
    //getController!.update();

    return "";
  }
  isLocationEnable.value = true;
  //  update();
  permission = await Geolocator.requestPermission();
  if (permission == LocationPermission.always ||
      permission == LocationPermission.whileInUse) {
    await Geolocator.getCurrentPosition(
            desiredAccuracy: LocationAccuracy.high)
        .then((value) async {
      List<Placemark> placemarks =
          await placemarkFromCoordinates(value.latitude, value.longitude);
      Placemark place = placemarks[0];
      lat.value = value.latitude;
      long.value = value.longitude;
      if (place.subLocality == null && place.locality == null) {
        address.value = '${place.name},${place.subAdministrativeArea}';
        //getController!.update();
        debugPrint("address is${place.toString()}");
      } else {
        debugPrint("address is${place.name},${place.subAdministrativeArea}");
        address.value =
            '${place.name} ${place.subLocality} ${place.locality},${place.subAdministrativeArea}';
        //  getController!.update();
      }
    });
    return address.value;
  }
  if (permission == LocationPermission.denied) {
    permission = await Geolocator.requestPermission();
    if (permission == LocationPermission.denied) {
      return address.value;
    } else {
      if (permission == LocationPermission.always ||
          permission == LocationPermission.whileInUse) {
        await Geolocator.getCurrentPosition(
                desiredAccuracy: LocationAccuracy.high)
            .then((value) async {
          List<Placemark> placemarks =
              await placemarkFromCoordinates(value.latitude, value.longitude);

          Placemark place = placemarks[0];
          lat.value = value.latitude;
          long.value = value.longitude;

          if (place.subLocality == null && place.locality == null) {
            address.value = '${place.name},${place.subAdministrativeArea}';
            //update;
            debugPrint("address is${place.toString()}");
          } else {
            debugPrint(
                "address is${place.name},${place.subAdministrativeArea}");
            address.value =
                '${place.name} ${place.subLocality} ${place.locality},${place.subAdministrativeArea}';
            // getController!.update();
          }
        });
        return address.value;
      }
    }
  }

  if (permission == LocationPermission.deniedForever) {
    permission = await Geolocator.requestPermission();
    //getController!.update();
    return address.value;
  }
  return address.value;
}