adwaita-swift/Tests/ListDemo.swift
david-swift 1c50b3b923 Make lists dynamic
Make one @State always reference the same value
This is important when views with closures appear after the first render
2024-01-01 16:08:17 +01:00

57 lines
1.3 KiB
Swift

//
// ListDemo.swift
// Adwaita
//
// Created by david-swift on 01.01.24.
//
// swiftlint:disable missing_docs
import Adwaita
import Foundation
struct ListDemo: View {
@State private var items: [Element] = []
@State private var selectedItem = ""
var view: Body {
HStack {
Button("Add Row") {
let element = Element(id: UUID().uuidString)
items.append(element)
selectedItem = element.id
}
Button("Delete Selected Row") {
let index = items.firstIndex { $0.id == selectedItem }
items = items.filter { $0.id != selectedItem }
selectedItem = items[safe: index]?.id ?? items[safe: index ?? 0 - 1]?.id ?? items.first?.id ?? ""
}
}
.padding()
.style("linked")
.halign(.center)
if !items.isEmpty {
List(items, selection: $selectedItem) { item in
HStack {
Text("\(item.id)")
.hexpand()
}
.padding()
}
.valign(.center)
.style("boxed-list")
.padding()
}
}
struct Element: Identifiable {
var id: String
}
}
// swiftlint:enable missing_docs