Komponen Penelusuran Tempat Lanjutan
Versi Lanjutan dari komponen Penelusuran Tempat menawarkan fitur yang sama dengan Penelusuran Tempat Essentials. Versi ini juga memungkinkan Anda mengonfigurasi tombol tindakan komponen dan menerapkan opsi penelusuran dan pemfilteran ke ulasan dan media yang muncul.
Konfigurasi Penelusuran Tempat Lanjutan
GunakanAdvancedPlaceSearchView untuk mengakses fitur Lanjutan.
Mengonfigurasi tombol tindakan
Gunakan metode .cornerActions dan .mainActions dari AdvancedPlaceSearchView untuk menghapus atau menyesuaikan tombol tindakan.
Persyaratan atribusi visual
Penting: Anda harus menjelaskan kepada pengguna kapan tombol tindakan kustom akan membagikan informasi pengguna kepada pihak ketiga selain Google. Lihat persyaratan atribusi visual.
Contoh ini menampilkan gambar kustom yang menjelaskan bahwa informasi pengguna akan dikirim ke "Altostrat".
Menerapkan opsi penelusuran dan pemfilteran
Gunakan metode .searchMediaOptions dan .searchReviewOptions dari AdvancedPlaceSearchView untuk mengaktifkan penelusuran dan pemfilteran untuk media atau ulasan.
Contoh Penelusuran Tempat Lanjutan
Membuat tombol tindakan utama dan menghapus tindakan sudut
Contoh kode ini membuat tombol tindakan utama untuk menandai atau membatalkan tanda tempat sebagai favorit. Contoh ini juga memastikan bahwa tidak ada tindakan sudut yang dikonfigurasi.
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) } } }
Memfilter ulasan dan media
Contoh kode ini memfilter hasil penelusuran agar hanya menampilkan media dan ulasan yang menyebutkan "kopi".
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)") } } }