Componente Place Details
O componente Place Details do Places UI Kit permite adicionar um componente de interface individual que mostra detalhes de lugares no seu app. Esse componente é personalizável.

O componente Detalhes do lugar pode ser usado de forma independente ou em conjunto com outras APIs e serviços da Plataforma Google Maps. O componente usa um ID do lugar, um nome de recurso ou coordenadas de latitude/longitude e retorna informações renderizadas de Detalhes do lugar.
O componente Place Details é totalmente temático, permitindo personalizar fontes, cores e raios de canto para corresponder ao seu caso de uso e às diretrizes da marca visual. É possível personalizar a aparência dos detalhes do lugar fornecendo valores PlacesMaterialTheme
personalizados. Também é possível personalizar quais campos de detalhes do lugar serão incluídos especificando uma lista de entradas PlaceDetailsCompactView
, cada uma correspondendo a uma informação mostrada sobre o lugar.
Variantes de layout
O componente Place Details oferece suporte a duas variantes principais de layout:
- Compacto:um layout para visualizar informações importantes.
- Completo:um layout abrangente que mostra todos os detalhes disponíveis do lugar.
O layout compacto pode ser mostrado na orientação vertical ou horizontal. Isso permite integrar o componente a vários layouts de design e tamanhos de tela. O layout completo só pode ser exibido na vertical.

O componente "Detalhes do lugar" oferece controle granular sobre o conteúdo exibido. Cada elemento (como fotos, avaliações e informações de contato) pode ser mostrado ou ocultado individualmente, permitindo uma personalização precisa da aparência dos componentes e da densidade de informações.

Visualização compacta de detalhes do lugar
A visualização compacta do Place Details (PlaceDetailsCompactView
) renderiza detalhes de um lugar selecionado usando o mínimo de espaço. Isso pode ser útil em uma janela de informações que destaca um lugar em um mapa, em uma experiência de mídia social, como compartilhar um local em um chat, como uma sugestão para selecionar seu local atual ou em um artigo de mídia para referenciar o lugar no Google Maps.
Visualização completa do Place Details
A visualização completa de detalhes do lugar (PlaceDetailsView
) oferece uma superfície maior para mostrar informações sobre o lugar e permite exibir mais tipos de informações.
Opções de exibição de conteúdo
É possível especificar qual conteúdo mostrar usando as enumerações em PlaceDetailsCompactContent
ou PlaceDetailsContent
.
Visualização compacta | Visualização completa |
---|---|
|
|
Faturamento
Ao usar o kit de interface do usuário de detalhes do lugar, você recebe uma cobrança a cada vez que o método PlaceDetailsQuery
é chamado. Se você carregar o mesmo lugar várias vezes, cada solicitação será cobrada.
Adicionar Place Details ao seu app
O componente Place Details é uma visualização da interface do Swift. Você pode personalizar a aparência das informações de detalhes do lugar de acordo com suas necessidades e a aparência do seu app. Saiba mais sobre a personalização.
Você pode carregar o componente Place Details com um ID de lugar, um nome de recurso ou coordenadas de latitude/longitude. Você pode escolher qualquer método ou vários. Defina o identifier
na estrutura PlaceDetailsQuery
como .placeID
, .resourceName
ou .coordinate
.
A posição padrão da visualização compacta é vertical. Se você quiser um layout horizontal, especifique orientation: .horizontal
em PlaceDetailsCompactView
. Também é possível especificar orientation: .vertical
para maior clareza. A visualização completa só pode ser mostrada na vertical.
Confira exemplos na seção Exemplos de componentes de detalhes do lugar.
Personalizar a aparência visual

O kit de interface do Places oferece uma abordagem de sistema de design para personalização visual baseada no Material Design (com algumas modificações específicas do Google Maps). Consulte a referência do Material Design para Cor e Tipografia. Por padrão, o estilo segue a linguagem de design visual do Google Maps.

A aparência do componente é personalizada com as structs placesMaterialColor
, placesMaterialFont
, placesMaterialShape
e placesMaterialTheme
.
É possível personalizar os seguintes estilos:

Atributo do tema | Uso |
---|---|
Cor | |
theme.color.surface |
Segundo plano do contêiner e da caixa de diálogo |
theme.color.outlineDecorative |
Borda do contêiner |
theme.color.primary |
Links, indicador de carregamento, ícones de visão geral |
theme.color.onSurface |
Títulos, conteúdo da caixa de diálogo |
theme.color.onSurfaceVariant |
Informações sobre o lugar |
theme.color.secondaryContainer |
Plano de fundo do botão |
theme.color.onSecondaryContainer |
Texto e ícone do botão |
theme.color.neutralContainer |
Revisar o selo de data, carregar formas de marcador de posição |
theme.color.onNeutralContainer |
Data da revisão, erro de carregamento |
theme.color.positiveContainer |
Selo de carregador de VE disponível |
theme.color.onPositiveContainer |
Conteúdo disponível do selo de carregador de VE |
theme.color.positive |
Colocar o marcador "Aberto agora" |
theme.color.negative |
O rótulo "Fechado" agora está no lugar |
theme.color.info |
Ícone de entrada acessível |
theme.measurement.borderWidthButton |
Botões "Abrir no Maps" e "OK" |
Tipografia | |
theme.font.bodySmall |
Informações sobre o lugar |
theme.font.bodyMedium |
Informações do lugar, conteúdo da caixa de diálogo |
theme.font.labelMedium |
Conteúdo do selo |
theme.font.labelLarge |
Conteúdo do botão |
theme.font.headlineMedium |
Títulos de caixa de diálogo |
theme.font.displaySmall |
Nome do lugar |
theme.font.titleSmall |
Nome do lugar |
Espaçamento | |
theme.measurement.spacingExtraSmall |
|
theme.measurement.spacingSmall |
|
theme.measurement.spacingMedium |
|
theme.measurement.spacinglarge |
|
theme.measurement.spacingExtraLarge |
|
theme.measurement.spacingTwoExtraLarge |
|
Medição | |
borderWidth |
Contêiner |
theme.measurement.borderWidthButton |
|
Forma | |
theme.shape.cornerRadius |
Contêiner |
theme.shape.cornerRadiusButton |
Botões "Abrir no Maps" e "OK" (exclui o botão de ícone redondo) |
theme.shape.cornerRadiusThumbnail |
Colocar imagem em miniatura |
theme.shape.cornerRadiusCollageOuter |
Colagem de mídia |
theme.shape.cornerRadiusCard |
Card de lugar, card de avaliação do usuário |
theme.shape.cornerRadiusDialog |
Caixa de diálogo de divulgação do Google Maps |
Atribuição de marca do Google Maps | |
attribution.lightModeColor |
Botão de atribuição e divulgação do Google Maps no tema claro (enums para branco, cinza e preto) |
attribution.darkModeColor |
Botão de atribuição e divulgação do Google Maps no tema escuro (enums para branco, cinza e preto) |
Confira exemplos na seção Exemplos de componentes de detalhes do lugar.
Personalização de largura e altura
Visualizações compactas
Larguras recomendadas:
- Orientação vertical: entre 180 e 300 pixels.
- Orientação horizontal: entre 180 e 500 pixels.
A prática recomendada é não definir uma altura para as visualizações compactas. Isso permite que o conteúdo na janela defina a altura, mostrando todas as informações.
Larguras menores que 160 pixels podem não ser exibidas corretamente.
Visualizações completas
Para visualizações completas, a largura recomendada é entre 250 e 450 pixels. Uma largura menor que 250 pixels pode não ser exibida corretamente.
É possível definir a altura do componente: a visualização vertical de detalhes do lugar rola verticalmente dentro do espaço alocado.
A prática recomendada é definir uma altura para visualizações completas. Isso permite que o conteúdo na janela role corretamente.
Cores de atribuição

Os Termos de Serviço do Google Maps exigem que você use uma das três cores da marca para a atribuição do Google Maps. Essa atribuição precisa estar visível e acessível quando as mudanças de personalização forem feitas.
Oferecemos três cores de marca para escolher, que podem ser definidas de forma independente para temas claros e escuros:
- Tema claro:
attributionColorLight
com enums para branco, cinza e preto. - Tema escuro:
attributionColorDark
com enums para branco, cinza e preto.
Exemplos de componentes Place Details
Criar uma visualização completa com layout vertical
Swift
var selectedType: Set<PlaceDetailsCompactContent> = PlaceDetailsCompactView.standardContent // Query for loading the place details widget. @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID("ChIJT7FdmYiAhYAROFOvrIxRJDU")) var theme: PlacesMaterialTheme = PlacesMaterialTheme() var configuration: PlaceDetailsConfiguration { PlaceDetailsConfiguration( content: selectedType, theme: theme) } // Callback for the place details widget. let placeDetailsCallback: (PlaceDetailsResult) -> Void = { result in if let place = result.place { print("Place: \(place.description)") } else { print("Error: \(String(describing: result.error))") } } PlaceDetailsCompactView( orientation: .vertical, query: $query, configuration: configuration, placeDetailsCallback: placeDetailsCallback )
Criar uma visualização compacta com layout horizontal
Swift
var selectedType: Set<PlaceDetailsCompactContent> = PlaceDetailsCompactView.standardContent // Query for loading the place details widget. @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID("ChIJT7FdmYiAhYAROFOvrIxRJDU")) var theme: PlacesMaterialTheme = PlacesMaterialTheme() var configuration: PlaceDetailsConfiguration { PlaceDetailsConfiguration( content: selectedType, theme: theme) } // Callback for the place details widget. let placeDetailsCallback: (PlaceDetailsResult) -> Void = { result in if let place = result.place { print("Place: \(place.description)") } else { print("Error: \(String(describing: result.error))") } } PlaceDetailsCompactView( orientation: .horizontal, query: $query, configuration: configuration, placeDetailsCallback: placeDetailsCallback )
Criar uma visualização completa com layout vertical
Swift
@State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID("ChIJT7FdmYiAhYAROFOvrIxRJDU")) var theme: PlacesMaterialTheme = PlacesMaterialTheme() var selectedType: Set<PlaceDetailsContent> = PlaceDetailsCompactView.standardContent var configuration: PlaceDetailsConfiguration { PlaceDetailsConfiguration( content: selectedType, theme: theme) } let placeDetailsCallback: (PlaceDetailsResult) -> Void = { result in placeIDPickerFocused = true if let place = result.place { print("Place: \(place.description)") } else { print("Error: \(String(describing: result.error))") } } GooglePlacesSwift.PlaceDetailsView( query: $query, configuration: configuration, placeDetailsCallback: placeDetailsCallback )
Personalizar atributos de estilo
Este exemplo mostra como personalizar os atributos de estilo padrão de uma visualização completa ou compacta.
Swift
// Same for compact and full func makeTemplateTheme(colorScheme: ColorScheme) -> PlacesMaterialTheme { var theme = PlacesMaterialTheme() var color = PlacesMaterialColor() color.surface = (colorScheme == .dark ? .blue : .gray) color.buttonBorder = (colorScheme == .dark ? .pink : .orange) color.outlineDecorative = (colorScheme == .dark ? .white : .black) color.onSurface = (colorScheme == .dark ? .yellow : .red) color.onSurfaceVariant = (colorScheme == .dark ? .white : .blue) color.onSecondaryContainer = (colorScheme == .dark ? .white : .red) color.secondaryContainer = (colorScheme == .dark ? .green : .purple) color.positive = (colorScheme == .dark ? .yellow : .red) color.primary = (colorScheme == .dark ? .yellow : .purple) color.info = (colorScheme == .dark ? .yellow : .purple) var shape = PlacesMaterialShape() shape.cornerRadius = 10 var font = PlacesMaterialFont() font.labelLarge = .system(size: UIFontMetrics.default.scaledValue(for: 18)) font.headlineMedium = .system(size: UIFontMetrics.default.scaledValue(for: 15)) font.bodyLarge = .system(size: UIFontMetrics.default.scaledValue(for: 15)) font.bodyMedium = .system(size: UIFontMetrics.default.scaledValue(for: 12)) font.bodySmall = .system(size: UIFontMetrics.default.scaledValue(for: 11)) var attribution = PlacesMaterialAttribution() attribution.lightModeColor = .black attribution.darkModeColor = .white theme.measurement.borderWidthButton = 1 theme.color = color theme.shape = shape theme.font = font theme.attribution = attribution return theme }
Mostrar conteúdo específico
Este exemplo cria uma visualização compacta que mostra apenas mídia, endereço, classificação e tipo, usando o tema criado no exemplo anterior.
Swift
@State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID("ChIJT7FdmYiAhYAROFOvrIxRJDU")) var body: some View { PlaceDetailsCompactView( orientation: .vertical, query: $query, contentType: [.media(), .address(), .rating(), .type(), .price()], theme: theme, placeDetailsCallback: placeDetailsCallback, preferTruncation: false ) .frame(width: 350) }