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