רכיב חיפוש מתקדם של מקומות
הגרסה המתקדמת של רכיב חיפוש המקומות מציעה את אותן תכונות כמו Place Search Essentials. בנוסף, אפשר להגדיר את לחצני הפעולה של הרכיב ולהחיל אפשרויות חיפוש וסינון על הביקורות והמדיה שמופיעות.
הגדרה מתקדמת של חיפוש מקומות
כדי לקבל גישה לתכונות המתקדמות, צריך להשתמש ב-AdvancedPlaceSearchView.
הגדרת לחצני פעולה
כדי להסיר או להתאים אישית את לחצני הפעולה, משתמשים בשיטות .cornerActions ו-.mainActions של AdvancedPlaceSearchView.
דרישות לייחוס חזותי
חשוב: עליכם להבהיר למשתמשים מתי לחצן פעולה מותאם אישית ישתף את פרטי המשתמש עם צד שלישי שאינו Google. דרישות לגבי שיוך חזותי
בדוגמה מוצגת תמונה בהתאמה אישית שבה מצוין בבירור שפרטי המשתמש יישלחו אל Altostrat.
שימוש באפשרויות חיפוש וסינון
משתמשים בשיטות .searchMediaOptions ו-.searchReviewOptions של AdvancedPlaceSearchView כדי להפעיל חיפוש וסינון של מדיה או ביקורות.
דוגמאות לחיפוש מתקדם של מקומות
יצירת כפתור פעולה ראשי והסרת פעולות בפינה
בדוגמת הקוד הזו נוצר לחצן פעולה ראשי לסימון מקום כמועדף או לביטול הסימון שלו כמועדף. בנוסף, המדיניות הזו מבטיחה שלא מוגדרות פעולות בפינות.
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)") } } }