saveCurrentLocation method

Future<void> saveCurrentLocation(
  1. PlaceDetails? selectedPlace, {
  2. Prediction? searchedItem,
  3. dynamic onDecodeAddress(
    1. UFUAddressModel?
    )?,
})

Implementation

Future<void> saveCurrentLocation(PlaceDetails? selectedPlace, {Prediction? searchedItem, Function(UFUAddressModel?)? onDecodeAddress}) async {
  UFUtils.hideKeyboard();
  if (selectedPlace == null && searchedItem == null) return;

  Location? sLocation = selectedPlace?.geometry?.location;

  if(searchedItem != null) {

    Map<String, dynamic> addressComponent = {"address_components": []};
    if(searchedItem.terms?.isNotEmpty ?? false) {
      for (var element in selectedPlace?.addressComponents ?? []) {
        addressComponent["address_components"].add(element.toJson());
      }
    }

    _geocodingResult = GeocodingResult.fromJson({
      "geometry": {
        "location": {
          "lat": sLocation?.lat,
          "lng": sLocation?.lng,
        }
      },
      "place_id": searchedItem.placeId,
      'formatted_address': searchedItem.description,
      ...addressComponent,
    });
  }

  try {
    String? city;
    String? state;
    String? country;
    String? postcode;

    for (var component in _geocodingResult?.addressComponents ?? []) {
      if (component.types?.contains('locality') ?? false) {
        city = component.longName;
      } else if (component.types?.contains('administrative_area_level_1') ?? false) {
        state = component.longName;
      } else if (component.types?.contains('country') ?? false) {
        country = component.longName;
      } else if (component.types?.contains('postal_code') ?? false) {
        postcode = component.longName;
      }
    }

    debugPrint("selectedLocLatLng----> ${_geocodingResult?.geometry?.location.lat}----${_geocodingResult?.geometry?.location.lng}");

    UFUAddressModel address = UFUAddressModel();

    address
      ..placeId = _geocodingResult?.placeId
      ..address = _geocodingResult?.formattedAddress
      ..completeAddress = _geocodingResult?.formattedAddress
      ..address1 = _geocodingResult?.formattedAddress
      ..address2 = null
      ..latitude = _geocodingResult?.geometry?.location.lat
      ..longitude = _geocodingResult?.geometry?.location.lng
      ..city = city
      ..state = state
      ..country = country
      ..postcode = postcode;

    onDecodeAddress?.call(address);
  } catch (e) {
    UFUtils.handleError(e);
  }

}