Composant Place Details

Le composant Place Details du kit d'UI Places vous permet d'ajouter un composant d'UI individuel qui affiche les détails d'un lieu dans votre application. Ce composant est personnalisable.

Composant compact "Détails sur le lieu"

Le composant "Détails du lieu" peut être utilisé de manière indépendante ou conjointement avec d'autres API et services Google Maps Platform. Le composant accepte un ID de lieu, un nom de ressource ou des coordonnées de latitude/longitude, et renvoie les informations Place Details (Détails du lieu) affichées.

Le composant Place Details est entièrement personnalisable. Vous pouvez ainsi modifier les polices, les couleurs et les rayons des angles pour les adapter à votre cas d'utilisation et aux consignes relatives à votre identité visuelle. Vous pouvez personnaliser l'apparence des détails du lieu en fournissant des valeurs PlacesMaterialTheme personnalisées. Vous pouvez également personnaliser les champs d'informations sur le lieu à inclure en spécifiant une liste d'entrées PlaceDetailsCompactView, chacune correspondant à une information affichée sur le lieu.

Variantes de mise en page

Le composant Détails du lieu est compatible avec deux variantes de mise en page principales :

  • Compact : mise en page permettant de prévisualiser les informations clés.
  • Complet : une mise en page complète affichant tous les détails disponibles sur le lieu.

La mise en page compacte peut être affichée en orientation verticale ou horizontale. Cela vous permet d'intégrer le composant dans différentes mises en page et tailles d'écran. La mise en page complète ne peut être affichée qu'à la verticale.

mises en page horizontales et verticales ;
Mises en page horizontales et verticales

Le composant "Détails du lieu" vous permet de contrôler précisément le contenu affiché dans le composant. Chaque élément (comme les photos, les avis et les coordonnées) peut être affiché ou masqué individuellement, ce qui permet de personnaliser précisément l'apparence des composants et la densité des informations.

Options de contenu des détails sur le lieu
Options d'affichage du contenu

Vue compacte des détails sur le lieu

La vue compacte Place Details (PlaceDetailsCompactView) affiche les détails d'un lieu sélectionné en utilisant un minimum d'espace. Cela peut être utile dans une fenêtre d'informations mettant en évidence un lieu sur une carte, dans une expérience de réseau social comme le partage d'une position dans une discussion, comme suggestion pour sélectionner votre position actuelle ou dans un article de presse pour faire référence au lieu sur Google Maps.

Vue complète des détails sur le lieu

La vue complète des détails sur le lieu (PlaceDetailsView) offre une plus grande surface pour afficher les informations sur le lieu et vous permet d'afficher plus de types d'informations.

Options d'affichage du contenu

Vous pouvez spécifier le contenu à afficher à l'aide des énumérations dans PlaceDetailsCompactContent ou PlaceDetailsContent.

Affichage compact Affichage du livre entier
  • Photo du lieu
  • Adresse du lieu
  • Note et nombre de notes
  • Type de lieu
  • Prix
  • Informations sur l'entrée accessible
  • État "Ouvert"
  • Montage photo du lieu
  • Adresse du lieu
  • Note et nombre de notes
  • Type de lieu
  • Prix
  • Informations sur l'accessibilité
  • État "Ouvert"
  • Horaires d'ouverture
  • Résumé éditorial
  • Site Web
  • Numéro de téléphone
  • Avis affichés dans un onglet dédié
  • Plus code
  • Liste des fonctionnalités, affichée dans un onglet dédié
  • Informations spécifiques à un type de lieu, comme les prix des carburants pour les stations-service

Facturation

Lorsque vous utilisez le kit d'interface utilisateur Place Details, vous êtes facturé à chaque appel de la méthode PlaceDetailsQuery. Si vous chargez le même lieu plusieurs fois, chaque requête vous sera facturée.

Ajouter des détails sur les lieux à votre application

Le composant Place Details est une vue Swift UI. Vous pouvez personnaliser l'apparence des informations sur les lieux en fonction de vos besoins et de l'apparence de votre application. En savoir plus sur la personnalisation

Vous pouvez choisir de charger le composant "Détails du lieu" avec un ID de lieu, un nom de ressource ou des coordonnées de latitude/longitude. Vous pouvez choisir une ou plusieurs méthodes. Définissez identifier dans la structure PlaceDetailsQuery sur .placeID, .resourceName ou .coordinate.

La position par défaut de la vue compacte est verticale. Si vous souhaitez une mise en page horizontale, spécifiez orientation: .horizontal dans PlaceDetailsCompactView. Vous pouvez également spécifier orientation: .vertical pour plus de clarté. La vue complète ne peut être affichée qu'à la verticale.

Consultez les exemples dans la section Exemples de composant "Détails du lieu".

Personnaliser l'apparence visuelle

Personnalisation visuelle des détails sur le lieu
Exemples de personnalisation visuelle

Le kit d'UI Places offre une approche de système de conception pour la personnalisation visuelle, basée en gros sur Material Design (avec quelques modifications spécifiques à Google Maps). Consultez la documentation de référence de Material Design pour les couleurs et la typographie. Par défaut, le style respecte le langage de conception visuelle de Google Maps.

Options de personnalisation des détails du lieu

L'apparence du composant est personnalisée avec les structs placesMaterialColor, placesMaterialFont, placesMaterialShape et placesMaterialTheme.

Vous pouvez personnaliser les styles suivants :

Personnalisation de la couleur et de la typographie des boîtes de dialogue
Personnalisation de la couleur et de la typographie de la boîte de dialogue
Attribut de thème Utilisation
Couleur
theme.color.surface Arrière-plan du conteneur et de la boîte de dialogue
theme.color.outlineDecorative Bordure du conteneur
theme.color.primary Liens, indicateur de chargement, icônes de présentation
theme.color.onSurface Titres, contenu de la boîte de dialogue
theme.color.onSurfaceVariant Informations sur le lieu
theme.color.secondaryContainer Arrière-plan du bouton
theme.color.onSecondaryContainer Texte et icône du bouton
theme.color.neutralContainer Formes de l'espace réservé de chargement et badge de date d'avis
theme.color.onNeutralContainer Date de l'avis, erreur de chargement
theme.color.positiveContainer Badge "Borne de recharge pour VE disponible"
theme.color.onPositiveContainer Contenu du badge "Borne pour VE disponible"
theme.color.positive Libellé "Ouvert" pour les lieux
theme.color.negative Libellé "Fermé" pour les lieux
theme.color.info Icône d'entrée accessible
theme.measurement.borderWidthButton Boutons "Ouvrir dans Maps" et "OK"
   
Typographie
theme.font.bodySmall Informations sur le lieu
theme.font.bodyMedium Informations sur le lieu, contenu de la boîte de dialogue
theme.font.labelMedium Contenu des badges
theme.font.labelLarge Contenu du bouton
theme.font.headlineMedium Titres de boîte de dialogue
theme.font.displaySmall Nom de lieu
theme.font.titleSmall Nom de lieu
   
Espacement
theme.measurement.spacingExtraSmall
theme.measurement.spacingSmall
theme.measurement.spacingMedium
theme.measurement.spacinglarge
theme.measurement.spacingExtraLarge
theme.measurement.spacingTwoExtraLarge
   
Mesures
borderWidth Conteneur
theme.measurement.borderWidthButton
   
Forme
theme.shape.cornerRadius Conteneur
theme.shape.cornerRadiusButton Boutons "Ouvrir dans Maps" et "OK" (à l'exclusion du bouton en forme d'icône ronde)
theme.shape.cornerRadiusThumbnail Vignette du lieu
theme.shape.cornerRadiusCollageOuter Montage multimédia
theme.shape.cornerRadiusCard Fiche d'établissement, fiche d'avis d'utilisateur
theme.shape.cornerRadiusDialog Boîte de dialogue d'informations Google Maps
   
Attribution de la marque Google Maps
attribution.lightModeColor Bouton d'attribution et de divulgation Google Maps avec thème clair (énumérations pour le blanc, le gris et le noir)
attribution.darkModeColor Bouton d'attribution et de divulgation du thème sombre Google Maps (énumérations pour le blanc, le gris et le noir)

Consultez les exemples dans la section Exemples de composant "Détails du lieu".

Personnalisation de la largeur et de la hauteur

Vues compactes

Largeurs recommandées :

  • Orientation verticale : entre 180 et 300 pixels.
  • Orientation horizontale : entre 180 et 500 pixels.

Il est recommandé de ne pas définir de hauteur pour les vues compactes. Cela permettra au contenu de la fenêtre de définir la hauteur, ce qui permettra d'afficher toutes les informations.

Les annonces dont la largeur est inférieure à 160 pixels peuvent ne pas s'afficher correctement.

Vues complètes

Pour les vues complètes, la largeur recommandée est comprise entre 250 et 450 pixels. Une largeur inférieure à 250 pixels peut ne pas s'afficher correctement.

Vous pouvez définir la hauteur du composant : la vue verticale des détails du lieu défilera verticalement dans l'espace alloué.

Il est recommandé de définir une hauteur pour les vues complètes. Cela permettra au contenu de la fenêtre de défiler correctement.

Couleurs d'attribution

attribution
Attribution

Les Conditions d'utilisation de Google Maps vous obligent à utiliser l'une des trois couleurs de la marque pour l'attribution Google Maps. Cette attribution doit être visible et accessible lorsque des modifications de personnalisation ont été apportées.

Vous pouvez choisir parmi trois couleurs de marque, qui peuvent être définies indépendamment pour les thèmes clair et sombre :

  • Thème clair : attributionColorLight avec des énumérations pour le blanc, le gris et le noir.
  • Thème sombre : attributionColorDark avec des énumérations pour le blanc, le gris et le noir.

Exemples de composants Place Details

Créer une vue complète avec une mise en page verticale

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
    )

Créer une vue compacte avec une mise en page horizontale

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
    )

Créer une vue complète avec une mise en page verticale

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
  )

Personnaliser les attributs de style

Cet exemple montre comment personnaliser les attributs de style par défaut d'une vue complète ou compacte.

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
}

Afficher un contenu spécifique

Cet exemple crée une vue compacte qui n'affiche que le contenu multimédia, l'adresse, la note et le type, à l'aide du thème créé dans l'exemple précédent.

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)
  }