進階地點搜尋元件
Place Search 元件的進階版與基本版提供相同功能,您也可以設定元件的動作按鈕,並對顯示的評論和媒體套用搜尋和篩選選項。
進階地點搜尋設定
使用AdvancedPlaceSearchView 存取進階功能。
設定動作按鈕
使用 AdvancedPlaceSearchView 的 .cornerActions 和 .mainActions 方法移除或自訂動作按鈕。
圖片出處資訊相關規定
重要事項:如果自訂動作按鈕會將使用者資訊分享給 Google 以外的第三方,請務必向使用者說明。請參閱視覺化出處資訊規定。
這個範例顯示自訂圖片,清楚說明使用者資訊將傳送至「Altostrat」。
套用搜尋和篩選選項
使用 AdvancedPlaceSearchView 的 .searchMediaOptions 和 .searchReviewOptions 方法,啟用媒體或評論的搜尋和篩選功能。
進階地點搜尋範例
建立主要動作按鈕並移除角落動作
這個程式碼範例會建立主要動作按鈕,用來將地點加入或移除我的最愛。同時確保未設定任何角落動作。
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) } } }
篩選評論和媒體
這個程式碼範例會篩選搜尋結果,只顯示提及「咖啡」的媒體和評論。
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)") } } }