Компонент «Расширенная информация о месте»
Расширенная версия компонента «Подробная информация о месте» предлагает те же функции, что и базовая версия компонента «Подробная информация о месте» . Она также позволяет настраивать кнопки действий компонента и применять параметры поиска и фильтрации к отображаемым отзывам и медиафайлам.
Расширенные настройки сведений о месте
Для доступа к расширенным функциям используйтеAdvancedPlaceDetailsView или AdvancedPlaceDetailsCompactView .Настройка кнопок действий
Используйте методы .cornerActions и .mainActions объектов AdvancedPlaceDetailsView или AdvancedPlaceDetailsCompactView , чтобы удалить или настроить кнопки действий.
Требования к визуальному указанию авторства
Важно: необходимо четко указывать конечным пользователям, когда пользовательская кнопка действия будет передавать информацию о пользователе третьей стороне, помимо Google. См. требования к визуальной атрибуции .
В примере справа показано пользовательское изображение, которое наглядно демонстрирует, что информация о пользователе будет отправлена в компанию «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)") } } } }