کامپوننت جستجوی پیشرفته مکان
نسخه پیشرفته کامپوننت Place Search همان ویژگیهای Place Search Essentials را ارائه میدهد. همچنین به شما امکان میدهد دکمههای عملیاتی کامپوننت را پیکربندی کنید و گزینههای جستجو و فیلتر را برای نظرات و رسانههایی که ظاهر میشوند اعمال کنید.
پیکربندی جستجوی پیشرفته مکان
برای دسترسی به ویژگیهای پیشرفته،AdvancedPlaceSearchView استفاده کنید.پیکربندی دکمههای عملیاتی
از متدهای .cornerActions و .mainActions از AdvancedPlaceSearchView برای حذف یا سفارشیسازی دکمههای عملیاتی استفاده کنید.
الزامات انتساب بصری
مهم: شما باید برای کاربران روشن کنید که چه زمانی یک دکمه اقدام سفارشی، اطلاعات کاربر را با شخص ثالثی غیر از گوگل به اشتراک میگذارد. به الزامات انتساب بصری مراجعه کنید.
این مثال یک تصویر سفارشی را نشان میدهد که به وضوح نشان میدهد اطلاعات کاربر به «Altostrat» ارسال خواهد شد.
اعمال گزینههای جستجو و فیلتر
از متدهای .searchMediaOptions و .searchReviewOptions از AdvancedPlaceSearchView برای فعال کردن جستجو و فیلتر کردن رسانهها یا نظرات استفاده کنید.
مثالهای جستجوی پیشرفته مکان
یک دکمه اکشن اصلی ایجاد کنید و اکشنهای گوشه را حذف کنید
این نمونه کد یک دکمهی اکشن اصلی برای افزودن یا حذف یک مکان به لیست علاقهمندیها ایجاد میکند. همچنین تضمین میکند که هیچ اکشن گوشهای پیکربندی نشده باشد.
سویفت
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) } } }
فیلتر کردن نظرات و رسانهها
این نمونه کد نتایج جستجو را فیلتر میکند تا فقط رسانهها و نقدهایی را نشان دهد که به «قهوه» اشاره دارند.
سویفت
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)") } } }