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