کامپوننت فهرست مکان پیشرفته

کامپوننت Advanced Place List به شما امکان می‌دهد لیستی از مکان‌ها را تعریف و نمایش دهید. می‌توانید تا 20 مکان را از همان مجموعه هویت‌های پشتیبانی شده توسط کامپوننت Place Details (شناسه‌های مکان، نام‌های منابع مکان یا مختصات طول/عرض) فهرست کنید.

شما می‌توانید نمایش لیست را به صورت افقی یا عمودی انتخاب کنید. جهت پیش‌فرض عمودی است. همان اطلاعات و گزینه‌های پیکربندی کارت‌های جزئیات مکان فشرده و کامل برای هر مورد از لیست در دسترس هستند.

برای ایجاد یک لیست از پارامترهای orientation ، placeIdentifiers و configuration مربوط به AdvancedPlaceListView استفاده کنید. برای جزئیات بیشتر به مثال مراجعه کنید.

صورتحساب

برای هر درخواست لیست، صورتحسابی از شما دریافت می‌شود و هرگونه تغییر در لیست، یک رویداد جدید قابل پرداخت است.

مثال

این نمونه، فهرستی بر اساس شناسه‌های مکان ایجاد می‌کند. پارامتر configuration مشخص می‌کند که هر آیتم فهرست، آدرس، امتیاز و نوع را به همراه سایر مشخصات بصری فهرست خواهد کرد. یک اقدام اصلی ایجاد می‌شود تا به کاربر اجازه دهد هر آیتم فهرست را به لیست علاقه‌مندی‌ها اضافه یا حذف کند. اقدامات گوشه‌ای برای هر آیتم فهرست غیرفعال هستند.

سویفت

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