Composant Advanced Place Search
La version Advanced du composant Place Search offre les mêmes fonctionnalités que Place Search Essentials. Elle vous permet également de configurer les boutons d'action du composant et d'appliquer des options de recherche et de filtrage aux avis et aux contenus multimédias qui s'affichent.
Configuration d'Advanced Place Search
UtilisezAdvancedPlaceSearchView pour accéder aux fonctionnalités avancées.
Configurer les boutons d'action
Utilisez les méthodes .cornerActions et .mainActions de AdvancedPlaceSearchView pour supprimer ou personnaliser les boutons d'action.
Exigences concernant l'attribution visuelle
Important : Vous devez indiquer clairement aux utilisateurs quand un bouton d'action personnalisé partagera des informations utilisateur avec un tiers autre que Google. Consultez les exigences concernant l'attribution visuelle.
L'exemple montre une image personnalisée qui indique clairement que les informations utilisateur seront envoyées à "Altostrat".
Appliquer des options de recherche et de filtrage
Utilisez les méthodes .searchMediaOptions et .searchReviewOptions de AdvancedPlaceSearchView pour activer la recherche et le filtrage des contenus multimédias ou des avis.
Exemples d'Advanced Place Search
Créer un bouton d'action principal et supprimer les actions d'angle
Cet exemple de code crée un bouton d'action principal pour ajouter un lieu aux favoris ou le supprimer. Il garantit également qu'aucune action d'angle n'est configurée.
Swift
struct AdvancedPlaceSearchDemoView: View { private let configuration = AdvancedPlaceSearchConfiguration( content: [.address(), .rating(), .type()], preferTruncation: true, // default is false theme: PlacesMaterialTheme(), attributionPosition: .bottom, // default is top mediaSize = .medium, // default is .small selectable: true // default is false ) // can also do let placeSearchViewRequest = .searchNearby(...) to configure a searchNearby request @State private var placeSearchViewRequest = .searchByText( SearchByTextRequest( textQuery: "Googleplex", placeProperties: [.all], locationBias: CircularCoordinateRegion( center: CLLocationCoordinate2D(latitude: 0, longitude: 0), radius: 0 ) ) ) @State private var favoritePlaces: Set<String> = [] var body: some View { AdvancedPlaceSearchView( orientation: .horizontal, // default is vertical request: placeSearchViewRequest, configuration: configuration ) .onLoad { places in print("places: \(places)") } .onRequestError { error in print("error: \(error)") } .onPlaceSelected { place, index in print("place: \(place)") print("index: \(index)") } .mainActions { place in var actions: [MainPlaceActionElement] = [] let placeID = place.placeID! if self.favoritePlaces.contains(placeID) { actions.append( .action( MainPlaceAction( image: Image(systemName: "heart.fill"), label: "Unfavorite" ) { _ in self.toggleFavorite(placeID) } ) ) } else { actions.append( .action( MainPlaceAction( image: Image(systemName: "heart"), label: "Favorite" ) { _ in self.toggleFavorite(placeID) } ) ) } actions.append(.actionId(.openMap(style: .primary))) return actions } // Ensures that there are no corner actions. .cornerActions { _ in return [] } } func toggleFavorite(_ placeID: String) { if favoritePlaces.contains(placeID) { favoritePlaces.remove(placeID) } else { favoritePlaces.insert(placeID) } } }
Filtrer les avis et les contenus multimédias
Cet exemple de code filtre les résultats de recherche pour n'afficher que les contenus multimédias et les avis qui mentionnent "café".
Swift
struct DemoView: View { static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU" // Query for loading the place details component. @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID(peetsCoffeePlaceID) ) let searchMediaOptions = SearchMediaOptions(query: "coffee", rankPreference: .newest) let searchReviewOptions = SearchReviewsOptions(query: "coffee", rankPreference: .newest) var body: some View { AdvancedPlaceDetailsView( query: $query, configuration: AdvancedPlaceDetailsConfiguration( content: [.media(), .reviews()], theme: PlacesMaterialTheme() ), placeDetailsCallback: { _ in } ) .searchMediaOptions(searchMediaOptions) { results in guard let result = results.first else { return } switch result { case .success(let summary): print("Summary: \(summary)") case .failure(let error): print("Error: \(error)") } } .searchReviewsOptions(searchReviewsOptions) { results in guard let result = results.first else { return } switch result { case .success(let summary): print("Summary: \(summary)") case .failure(let error): print("Error: \(error)") } } }