Componente básico do Place Autocomplete
Com o componente Basic Place Autocomplete do Places UI Kit, é possível adicionar um componente de interface individual que retorna um ID de lugar quando um usuário seleciona um lugar. O componente é uma capa de tela cheia que oferece uma barra de pesquisa para os usuários inserirem uma consulta. À medida que o usuário digita, uma lista de resultados de preenchimento automático aparece abaixo da barra de pesquisa. Quando o usuário toca em um lugar, um objeto com apenas o ID do lugar é retornado ao desenvolvedor. Esse componente é personalizável.
O componente usa limites geográficos e outros parâmetros de pesquisa pela struct AutocompleteFilter
.
A resposta fornece uma estrutura Place
com apenas o campo placeID
preenchido.
O componente de preenchimento automático básico de lugares tem as seguintes opções de personalização: densidade da lista e inclusão de ícones de local. Use a struct AutocompleteUICustomization
para personalizar o componente.
Você pode usar o componente de preenchimento automático básico de lugares de forma independente ou em conjunto com outras APIs e serviços da Plataforma Google Maps.
Faturamento
A cobrança é feita sempre que o componente é aberto e uma consulta é feita. Você não vai receber outra cobrança por essa sessão, a menos que ela expire ou um lugar seja selecionado na lista.
Adicionar o componente de preenchimento automático básico ao app
Defina os parâmetros de filtro de preenchimento automático (por exemplo, os tipos a serem retornados, o país para limitar os resultados, as coordenadas da região para os resultados e as informações de distância se a origem dos usuários estiver definida) como faria para usar o Place Autocomplete (New) sem o Places UI Kit. Consulte a documentação do Place Autocomplete (novo) para instruções completas e um exemplo do código para criar um filtro de preenchimento automático.
Depois de criar o filtro de preenchimento automático, você pode criar uma struct com suas personalizações de UI. Confira as opções e instruções de personalização.
Em seguida, crie um botão que vai iniciar o componente de preenchimento automático básico personalizado.
Swift
Button("Search for a place") { showWidget.toggle() } .basicPlaceAutocomplete( show: $showWidget // ... )
Personalizar o componente de preenchimento automático básico
Densidade da lista
Você pode escolher exibir uma lista de duas linhas ou uma lista de várias linhas. Use as opções em AutocompleteListDensity
(.twoLine
ou .multiLine
) na classe AutocompleteUICustomization
. Se você não especificar a densidade da lista, o componente vai mostrar uma lista de duas linhas.
Ícone de local
Você pode escolher se quer mostrar um ícone de lugar padrão na lista de resultados. Use as opções em AutocompleteUIIcon
(.defaultIcon
ou .noIcon
) na classe AutocompleteUICustomization
.
Adicionar personalizações ao componente de preenchimento automático básico
Use a classe AutocompleteUICustomization
para personalizar o componente de preenchimento automático básico.
Swift
let uiCustomization = AutocompleteUICustomization( listDensity: .multiLine, listItemIcon: .noIcon, )
Exemplo
Este exemplo cria um componente de preenchimento automático básico personalizado com um botão. O ícone padrão e a densidade da lista de duas linhas foram selecionados. O filtro de preenchimento automático está definido para encontrar lugares relacionados à contabilidade em Las Vegas e arredores.
Swift
// Note: You must provide an API key in your app entry point first. // A demo view of the basic place autocomplete widget. public struct BasicPlaceAutocompleteView: View { @State private var fetchedPlace: Place? @State private var placesError: PlacesError? @State private var showWidget = false public var body: some View { let types: Set<PlaceType> = [.accounting] let countries: Set<String> = ["US"] let origin = CLLocation(latitude: 36.19030535579595, longitude: -115.25397680618019) let coordinateRegion = RectangularCoordinateRegion( northEast: CLLocationCoordinate2D( latitude: 36.25290087640495, longitude: -115.08025549571225), southWest: CLLocationCoordinate2D(latitude: 36.06607422287787, longitude: -115.33431432920293) ) let regionCode = "US" let inputOffset = 10 let filter = AutocompleteFilter( types: types, countries: countries, origin: origin, coordinateRegionBias: coordinateRegion, regionCode: regionCode) let uiCustomization = AutocompleteUICustomization( listDensity: .multiLine, listItemIcon: .noIcon) VStack { Button("Search for a place") { showWidget.toggle() } .basicPlaceAutocomplete( filter: filter, uiCustomization: uiCustomization ?? AutocompleteUICustomization(), show: $showWidget, onSelection: { place in guard let placeID = place.placeID else { self.placesError = .internal( "Could not fetch place details because place ID from selected suggestion not found." ) return } Task { let placesClient = await PlacesClient.shared let fetchPlaceRequest = FetchPlaceRequest( placeID: placeID, placeProperties: [.displayName, .formattedAddress] ) switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): print("Fetched place: \(place)") self.fetchedPlace = place case .failure(let placesError): print("Failed to fetch place: \(placesError)") self.placesError = placesError } } }, onError: { placesError in self.placesError = placesError } ) if let placesError = $placesError.wrappedValue { Text(placesError.localizedDescription) .frame(maxWidth: .infinity, alignment: .leading) } else if let fetchedPlace = $fetchedPlace.wrappedValue { Text("\(fetchedPlace)") .frame(maxWidth: .infinity, alignment: .leading) } } } }