meta/Tests/DemoApp/DemoApp.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)
}
}