רכיב מתקדם של רשימת מקומות

הרכיב 'רשימת מקומות מתקדמת' מאפשר לכם להגדיר ולהציג רשימה של מקומות. אפשר לציין עד 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)
    }
  }
}