Componente Basic Place Autocomplete
Il componente Basic Place Autocomplete di Places UI Kit consente di aggiungere un singolo componente UI che restituisce un ID luogo quando un utente seleziona un luogo. Il componente è una copertura a schermo intero che fornisce una barra di ricerca in cui gli utenti possono inserire una query. Man mano che l'utente digita, sotto la barra di ricerca viene visualizzato un elenco di risultati di completamento automatico. Quando l'utente tocca un luogo, allo sviluppatore viene restituito un oggetto luogo con solo l'ID luogo. Questo componente è personalizzabile.
Il componente accetta limiti geografici e altri parametri di ricerca tramite la AutocompleteFilter struttura.
La risposta fornisce una Place struct con solo il campo placeID compilato.
Il componente Basic Place Autocomplete ha le seguenti opzioni di personalizzazione: densità dell'elenco e se includere le icone della posizione. Utilizza la AutocompleteUICustomization struttura per personalizzare il componente.
Puoi utilizzare il componente Basic Place Autocomplete in modo indipendente o in combinazione con altre API e servizi di Google Maps Platform.
Fatturazione
Ti viene addebitato un importo ogni volta che il componente viene aperto e viene eseguita una query. Non ti verrà addebitato alcun importo per la sessione, a meno che non scada o non venga selezionato un luogo dall'elenco.
Aggiungere il componente Basic Autocomplete all'app
Imposta i parametri del filtro di completamento automatico (ad esempio, i tipi da restituire, il paese a cui limitare i risultati, le coordinate della regione per i risultati e le informazioni sulla distanza se l'origine degli utenti è impostata) come faresti per utilizzare Place Autocomplete (New) senza Places UI Kit. Per istruzioni complete e esempi di codice per creare un filtro di completamento automatico, consulta la documentazione di Place Autocomplete (New).
Dopo aver creato il filtro di completamento automatico, puoi creare una struttura con le personalizzazioni dell'interfaccia utente. Consulta le opzioni e le istruzioni di personalizzazione.
Poi crea un pulsante che avvii il componente Basic Autocomplete personalizzato.
Swift
Button("Search for a place") { showWidget.toggle() } .basicPlaceAutocomplete( show: $showWidget // ... )
Personalizzare il componente Basic Autocomplete
Personalizzare contenuti
Densità elenco
Puoi scegliere di visualizzare un elenco a due righe o un elenco multiriga. Utilizza le opzioni in AutocompleteListDensity (.twoLine o .multiLine) nella classe AutocompleteUICustomization. Se non specifichi la densità dell'elenco, il componente visualizzerà un elenco a due righe.
Icona della posizione
Puoi scegliere se visualizzare un'icona del luogo predefinita nell'elenco dei risultati. Utilizza le opzioni in AutocompleteUIIcon (.defaultIcon o .noIcon) nella classe AutocompleteUICustomization.
Personalizzare il tema
Puoi specificare un tema che sostituisca uno qualsiasi degli attributi di stile predefiniti. Puoi personalizzare i colori, la tipografia, la spaziatura, i bordi e gli angoli del componente Dettagli luogo. Il valore predefinito è PlacesMaterialTheme.
Gli attributi del tema che non vengono sostituiti utilizzano gli stili predefiniti.
Places UI Kit fornisce un tema scuro per impostazione predefinita, quindi potrebbe essere necessario personalizzare sia il tema scuro sia quello chiaro. Per personalizzare il tema scuro, aggiungi i valori per .dark e attribution.darkModeColor al tuo tema personalizzato.
Per ulteriori informazioni sui temi, consulta la sezione Stili personalizzati.
Aggiungere personalizzazioni di contenuti e temi al componente Basic Autocomplete
Utilizza la AutocompleteUICustomization classe per personalizzare il componente Basic Autocomplete.
Swift
let uiCustomization = AutocompleteUICustomization( listDensity: .multiLine, listItemIcon: .noIcon, theme: PlacesMaterialTheme() )
Esempio
Aggiungere un componente Basic Autocomplete
Questo esempio crea un componente Basic Autocomplete personalizzato con un pulsante. Sono stati impostati l'icona predefinita, la densità dell'elenco a due righe e il tema personalizzato. Il filtro di completamento automatico è impostato per trovare i luoghi correlati alla contabilità a Las Vegas e nelle vicinanze.
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, theme: PlacesMaterialTheme() ) 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) } } } }
Personalizzare il tema
Swift
@Environment(\.colorScheme) var colorScheme var theme: PlacesMaterialTheme { if customTheme { var theme = PlacesMaterialTheme() var color = PlacesMaterialColor() color.surface = (colorScheme == .dark ? .blue : .gray) color.outlineDecorative = (colorScheme == .dark ? .white : .black) color.onSurface = (colorScheme == .dark ? .yellow : .red) color.onSurfaceVariant = (colorScheme == .dark ? .white : .blue) color.onSecondaryContainer = (colorScheme == .dark ? .white : .red) color.secondaryContainer = (colorScheme == .dark ? .green : .purple) color.positive = (colorScheme == .dark ? .yellow : .red) color.primary = (colorScheme == .dark ? .yellow : .purple) color.info = (colorScheme == .dark ? .yellow : .purple) var shape = PlacesMaterialShape() shape.cornerRadius = 10 var font = PlacesMaterialFont() font.labelLarge = .system(size: UIFontMetrics.default.scaledValue(for: 18)) font.headlineMedium = .system(size: UIFontMetrics.default.scaledValue(for: 15)) font.bodyLarge = .system(size: UIFontMetrics.default.scaledValue(for: 15)) font.bodyMedium = .system(size: UIFontMetrics.default.scaledValue(for: 12)) font.bodySmall = .system(size: UIFontMetrics.default.scaledValue(for: 11)) var attribution = PlacesMaterialAttribution() attribution.lightModeColor = .black attribution.darkModeColor = .white theme.color = color theme.shape = shape theme.font = font theme.attribution = attribution } else { return PlacesMaterialTheme() } }