Erweiterte Komponenten für Ortslisten

Mit der Komponente „Erweiterte Ortsliste“ können Sie eine Liste von Orten definieren und anzeigen. Sie können bis zu 20 Orte aus derselben Gruppe von Identitäten auflisten, die von der Komponente „Ortsdetails“ unterstützt werden (Orts-IDs, Ortsressourcennamen oder Breiten-/Längengradkoordinaten).

Sie können zwischen einer horizontalen oder vertikalen Listendarstellung wählen. Die Standardausrichtung ist vertikal. Für jedes Listenelement sind dieselben Informationen und Konfigurationsoptionen wie für die kompakten und vollständigen Ortsdetailkarten verfügbar.

Verwenden Sie die Parameter orientation, placeIdentifiers und configuration von AdvancedPlaceListView, um eine Liste zu erstellen. Weitere Informationen finden Sie im Beispiel.

Abrechnung

Jede Listenanfrage wird in Rechnung gestellt. Jede Änderung an der Liste ist ein neues abrechenbares Ereignis.

Beispiel

In diesem Beispiel wird eine Liste basierend auf Orts-IDs erstellt. Mit dem Parameter configuration wird angegeben, dass für jedes Listenelement die Adresse, die Bewertung und der Typ sowie andere visuelle Spezifikationen aufgeführt werden. Es wird eine Hauptaktion erstellt, mit der Nutzer jedes Listenelement als Favorit markieren oder die Markierung entfernen können. Eckaktionen sind für jedes Listenelement deaktiviert.

Swift

  struct AdvancedPlaceListDemoView: View {
  private let configuration = AdvancedPlaceListConfiguration(
    content: [.address(), .rating(), .type()],
    preferTruncation: true,
    theme: PlacesMaterialTheme(),
    attributionPosition: .bottom,
    mediaSize = .medium,
    selectable: true
  )
  @State private var placeIdentifiers = [.placeID("ChIJj61dQgK6j4AR4GeTYWZsKWw")]

  @State private var favoritePlaces: Set<String> = []

  var body: some View {
    AdvancedPlaceListView(
      orientation: .horizontal, // default is vertical
      placeIdentifiers: placeIdentifiers,
      configuration: configuration
    )
    .onLoad { results in
      for result in results {
        switch result {
          case .success(let place)
            print("place: \(place)")
          case .failure(let error)
            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)
    }
  }
}