مكوّن "قائمة الأماكن" المتقدّم

يتيح لك مكوّن "قائمة الأماكن المتقدّمة" تحديد قائمة بالأماكن وعرضها. يمكنك إدراج ما يصل إلى 20 مكانًا من مجموعة الهويات نفسها التي يتيحها مكوّن "تفاصيل المكان" (معرّفات الأماكن أو أسماء موارد الأماكن أو إحداثيات خطوط الطول والعرض).

يمكنك الاختيار من عرض القائمة أفقيًا أو عموديًا. يكون الاتجاه التلقائي عموديًا. تتوفّر المعلومات وخيارات الإعداد نفسها المتوفّرة في بطاقات التفاصيل الكاملة والموجزة الخاصة بالأماكن لكل عنصر في القائمة.

استخدِم المَعلمات orientation وplaceIdentifiers وconfiguration الخاصة بـ AdvancedPlaceListView لإنشاء قائمة. اطّلِع على المثال لمزيد من التفاصيل.

الفوترة

تتم محاسبتك على كل طلب قائمة، وأي تغيير في القائمة هو حدث جديد قابل للفوترة.

مثال

ينشئ هذا النموذج قائمة استنادًا إلى معرّفات الأماكن. تحدّد المَعلمة configuration أنّ كل عنصر في القائمة سيعرض العنوان والتقييم والنوع، بالإضافة إلى مواصفات مرئية أخرى. يتم إنشاء إجراء رئيسي للسماح للمستخدم بإضافة كل عنصر من عناصر القائمة إلى المفضّلة أو إزالته منها. يتم إيقاف الإجراءات في الزاوية لكل عنصر من عناصر القائمة.

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