buildPlaceFromComponents function

Place buildPlaceFromComponents({
  1. required List<RawAddressComponent> components,
  2. String? name,
  3. String? formattedAddress,
  4. double? lat,
  5. double? lng,
})

Builds a Place from normalized address components plus top-level fields. Shared by both API providers so that derived fields (Place.zipCodePlus4 and the synthesized Place.streetAddress, Place.formattedAddress, Place.formattedAddressZipPlus4) behave identically regardless of backend.

Implementation

Place buildPlaceFromComponents({
  required List<RawAddressComponent> components,
  String? name,
  String? formattedAddress,
  double? lat,
  double? lng,
}) {
  final place = Place();

  place.formattedAddress = formattedAddress;
  place.name = name;
  place.lat = lat;
  place.lng = lng;

  for (final component in components) {
    final type = component.types;
    if (type.contains('street_address')) {
      place.streetAddress = component.longText;
    }
    if (type.contains('street_number')) {
      place.streetNumber = component.longText;
    }
    if (type.contains('route')) {
      place.street = component.longText;
      place.streetShort = component.shortText;
    }
    if (type.contains('sublocality') || type.contains('sublocality_level_1')) {
      place.vicinity = component.longText;
    }
    if (type.contains('locality')) {
      place.city = component.longText;
    }
    if (type.contains('administrative_area_level_2')) {
      place.county = component.longText;
    }
    if (type.contains('administrative_area_level_1')) {
      place.state = component.longText;
      place.stateShort = component.shortText;
    }
    if (type.contains('country')) {
      place.country = component.longText;
    }
    if (type.contains('postal_code')) {
      place.zipCode = component.longText;
    }
    if (type.contains('postal_code_suffix')) {
      place.zipCodeSuffix = component.longText;
    }
  }

  if (place.zipCode != null) {
    place.zipCodePlus4 ??=
        '${place.zipCode}${place.zipCodeSuffix != null ? '-${place.zipCodeSuffix}' : ''}';
  }
  if (place.streetNumber != null) {
    place.streetAddress ??= '${place.streetNumber} ${place.streetShort}';
    place.formattedAddress ??=
        '${place.streetNumber} ${place.streetShort}, ${place.city}, ${place.stateShort} ${place.zipCode}';
    place.formattedAddressZipPlus4 ??=
        '${place.streetNumber} ${place.streetShort}, ${place.city}, ${place.stateShort} ${place.zipCodePlus4}';
  }
  return place;
}