Erweiterte „Place Details“-Komponente
Die erweiterte Version der „Place Details“-Komponente bietet dieselben Funktionen wie Places Details Essentials. Außerdem können Sie die Aktionsbuttons der Komponente konfigurieren und Such- und Filteroptionen auf die angezeigten Rezensionen und Medien anwenden.
Erweiterte „Place Details“-Konfiguration
Verwenden SieAdvancedPlaceDetailsView oder AdvancedPlaceDetailsCompactView, um auf erweiterte Funktionen zuzugreifen.
Aktionsbuttons konfigurieren
Verwenden Sie die Methoden .cornerActions und .mainActions von AdvancedPlaceDetailsView oder AdvancedPlaceDetailsCompactView, um die Aktionsbuttons zu entfernen oder anzupassen.
Anforderungen an die visuelle Quellenangabe
Wichtig:Sie müssen Endnutzer darüber informieren, wenn über einen benutzerdefinierten Aktionsbutton Nutzerinformationen an einen anderen Drittanbieter als Google weitergegeben werden. Weitere Informationen finden Sie unter Anforderungen an die visuelle Quellenangabe.
Das Beispiel rechts zeigt ein benutzerdefiniertes Bild, aus dem hervorgeht, dass Nutzerinformationen an „Altostrat“ gesendet werden.
Such- und Filteroptionen anwenden
Verwenden Sie die Methoden .searchMediaOptions und .searchReviewOptions von AdvancedPlaceDetailsView oder AdvancedPlaceDetailsCompactView, um die Suche und Filterung für Medien oder Rezensionen zu aktivieren.
Beispiele für die erweiterte „Place Details“-Komponente
Aktionsbuttons entfernen
Swift
struct DemoView: View { static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU" @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID(peetsCoffeePlaceID) ) var body: some View { AdvancedPlaceDetailsView( query: $query, configuration: AdvancedPlaceDetailsConfiguration( content: AdvancedPlaceDetailsView.allContent, theme: PlacesMaterialTheme() ), placeDetailsCallback: { result in if let place = result.place { print("Place: \(place.description)") } else { print("Error: \(String(describing: result.error))") } } ) .mainActions{ _ in return [] } } }
Benutzerdefinierte und vordefinierte Aktionen hinzufügen
In diesem Beispiel wird die Option hinzugefügt, einen Ort als Favorit zu markieren oder die Markierung zu entfernen, sowie die vordefinierte Aktion In Google Maps öffnen.
Swift
struct DemoView: View { static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU" @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID(peetsCoffeePlaceID) ) @State var favoritePlaces: Set<String> = [] var body: some View { AdvancedPlaceDetailsView( query: $query, configuration: AdvancedPlaceDetailsConfiguration( content: AdvancedPlaceDetailsView.allContent, theme: PlacesMaterialTheme() ), placeDetailsCallback: { result in if let place = result.place { print("Place: \(place.description)") } else { print("Error: \(String(describing: result.error))") } } ) .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 } .cornerActions { place in var actions: [CornerPlaceActionElement] = [] let placeID = place.placeID! if self.favoritePlaces.contains(placeID) { actions.append( .action( CornerPlaceAction( image: Image(systemName: "heart.fill"), accessibilityLabel: "Unfavorite", ) { _ in self.toggleFavorite(placeID) } ) ) } else { actions.append( .action( CornerPlaceAction( image: Image(systemName: "heart"), accessibilityLabel: "Favorite", ) { _ in self.toggleFavorite(placeID) } ) ) } actions.append(.actionId(.openMap(style: .primary))) return actions } } func toggleFavorite(_ placeID: String) { if favoritePlaces.contains(placeID) { favoritePlaces.remove(placeID) } else { favoritePlaces.insert(placeID) } } }
Rezensionen und Medien filtern
In diesem Codebeispiel werden nur Medien und Rezensionen angezeigt, in denen „Kaffee“ erwähnt wird.
Swift
struct DemoView: View { static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU" @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID(peetsCoffeePlaceID) ) let searchMediaOptions = SearchMediaOptions(query: "coffee") let searchReviewsOptions = SearchReviewsOptions(query: "coffee") 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)") } } } }