81 lines
1.8 KiB
Swift
81 lines
1.8 KiB
Swift
import Foundation
|
|
import Meta
|
|
import Observation
|
|
import SampleBackends
|
|
|
|
@available(macOS 14, *)
|
|
@available(iOS 17, *)
|
|
struct DemoView: View {
|
|
|
|
@State private var test = TestModel()
|
|
|
|
var view: Body {
|
|
Backend1.TestWidget1()
|
|
Backend1.Button(test.test) {
|
|
test.test = "\(Int.random(in: 1...10))"
|
|
}
|
|
TestView()
|
|
testContent
|
|
}
|
|
|
|
@ViewBuilder
|
|
var testContent: Body {
|
|
Backend2.TestWidget2()
|
|
Backend1.TestWidget3()
|
|
}
|
|
|
|
}
|
|
|
|
struct TestView: View {
|
|
|
|
@State private var test = "Label"
|
|
|
|
var view: Body {
|
|
Backend2.TestWidget4()
|
|
Backend1.Button(test) {
|
|
Task {
|
|
try await Task.sleep(nanoseconds: 100_000_000)
|
|
test = "\(Int.random(in: 1...10))"
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
@available(macOS 14, *)
|
|
@available(iOS 17, *)
|
|
@Observable
|
|
class TestModel {
|
|
|
|
var test = "Label"
|
|
|
|
}
|
|
|
|
@main
|
|
@available(macOS 14, *)
|
|
@available(iOS 17, *)
|
|
struct DemoApp {
|
|
|
|
static func main() {
|
|
let backendType = Backend1.BackendWidget.self
|
|
let modifiers: [(AnyView) -> AnyView] = [
|
|
{ $0 as? Backend2.TestWidget2 != nil ? [Backend1.TestWidget1()] : $0 }
|
|
]
|
|
|
|
print(DemoView().getDebugTree(parameters: true, type: backendType, modifiers: modifiers))
|
|
let storage = DemoView().storage(modifiers: modifiers, type: backendType)
|
|
for round in 0...2 {
|
|
print("#\(round)")
|
|
DemoView().updateStorage(storage, modifiers: modifiers, updateProperties: true, type: backendType)
|
|
}
|
|
|
|
StateManager.addUpdateHandler { _ in
|
|
DemoView().updateStorage(storage, modifiers: modifiers, updateProperties: false, type: backendType)
|
|
}
|
|
|
|
sleep(2)
|
|
DemoView().updateStorage(storage, modifiers: modifiers, updateProperties: true, type: backendType)
|
|
}
|
|
|
|
}
|