Thành phần Danh sách địa điểm nâng cao

Thành phần Danh sách địa điểm nâng cao cho phép bạn xác định và hiển thị danh sách địa điểm. Bạn có thể liệt kê tối đa 20 địa điểm từ cùng một tập hợp danh tính mà thành phần Chi tiết địa điểm hỗ trợ (Mã địa điểm, Tên tài nguyên địa điểm hoặc toạ độ vĩ độ/kinh độ).

Bạn có thể chọn hiển thị danh sách theo chiều ngang hoặc chiều dọc. Hướng mặc định là hướng dọc. Bạn có thể sử dụng cùng một thông tin và các lựa chọn cấu hình như thẻ chi tiết địa điểm đầy đủ và thẻ chi tiết địa điểm thu gọn cho từng mục trong danh sách.

Sử dụng các tham số orientation, placeIdentifiersconfiguration của AdvancedPlaceListView để tạo danh sách. Hãy xem Ví dụ để biết thêm thông tin.

Thanh toán

Bạn sẽ bị tính phí cho mỗi yêu cầu về danh sách và mọi thay đổi đối với danh sách đều là một sự kiện mới có tính phí.

Ví dụ

Mẫu này tạo danh sách dựa trên mã nhận dạng địa điểm. Tham số configuration chỉ định rằng mỗi mục trong danh sách sẽ liệt kê địa chỉ, điểm xếp hạng và loại, cùng với các thông số kỹ thuật khác về hình ảnh. Một thao tác chính được tạo để cho phép người dùng thêm hoặc xoá từng mục trong danh sách khỏi danh sách yêu thích. Các thao tác ở góc bị tắt đối với từng mục trong danh sách.

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