Komponen Daftar Tempat Lanjutan

Komponen Daftar Tempat Lanjutan memungkinkan Anda menentukan dan menampilkan daftar tempat. Anda dapat mencantumkan hingga 20 tempat dari kumpulan identitas yang sama yang didukung oleh komponen Place Details (ID Tempat, Nama Resource Tempat, atau koordinat lat/long).

Anda dapat memilih tampilan daftar horizontal atau vertikal. Orientasi default adalah vertikal. Opsi informasi dan konfigurasi yang sama seperti kartu detail tempat ringkas dan lengkap tersedia untuk setiap item daftar.

Gunakan parameter orientation, placeIdentifiers, dan configuration dari AdvancedPlaceListView untuk membuat daftar. Lihat Contoh untuk mengetahui detail selengkapnya.

Penagihan

Anda akan ditagih untuk setiap permintaan daftar, dan setiap perubahan pada daftar adalah peristiwa baru yang dapat ditagih.

Contoh

Contoh ini membuat daftar berdasarkan ID tempat. Parameter configuration menentukan bahwa setiap item daftar akan mencantumkan alamat, rating, dan jenis, beserta spesifikasi visual lainnya. Tindakan utama dibuat untuk memungkinkan pengguna menyukai atau membatalkan penyukaan setiap item daftar. Tindakan sudut dinonaktifkan untuk setiap item daftar.

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