From e490cf2b82bafcc35ec1fceb65d99b7a3a701e8d Mon Sep 17 00:00:00 2001 From: david-swift Date: Fri, 19 Jul 2024 21:14:44 +0200 Subject: [PATCH] Fix observing models not always working --- Sources/Model/User Interface/App/App.swift | 8 +++----- Sources/View/StateWrapper.swift | 8 +++----- Tests/DemoApp/DemoApp.swift | 7 ++++--- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/Sources/Model/User Interface/App/App.swift b/Sources/Model/User Interface/App/App.swift index 3f06841..3a9758f 100644 --- a/Sources/Model/User Interface/App/App.swift +++ b/Sources/Model/User Interface/App/App.swift @@ -113,11 +113,9 @@ extension App { withObservationTracking { _ = scene } onChange: { - Task { - StateManager.updateState(id: app.storage.stateStorage.first?.value.id ?? .init()) - StateManager.updateViews() - observe() - } + StateManager.updateState(id: app.storage.stateStorage.first?.value.id ?? .init()) + StateManager.updateViews() + observe() } } diff --git a/Sources/View/StateWrapper.swift b/Sources/View/StateWrapper.swift index f836c1a..2eecad3 100644 --- a/Sources/View/StateWrapper.swift +++ b/Sources/View/StateWrapper.swift @@ -85,11 +85,9 @@ struct StateWrapper: ConvenienceWidget { withObservationTracking { _ = content() } onChange: { - Task { - StateManager.updateState(id: storage.state.first?.value.id ?? .init()) - StateManager.updateViews() - observe(storage: storage) - } + StateManager.updateState(id: storage.state.first?.value.id ?? .init()) + StateManager.updateViews() + observe(storage: storage) } } diff --git a/Tests/DemoApp/DemoApp.swift b/Tests/DemoApp/DemoApp.swift index f795cec..9e9a90a 100644 --- a/Tests/DemoApp/DemoApp.swift +++ b/Tests/DemoApp/DemoApp.swift @@ -60,14 +60,15 @@ struct DemoView: View { } +@available(macOS 14, *) struct TestView: View { - @State private var test = "Label" + @State private var test = TestModel() var view: Body { Backend2.TestWidget4() - Backend1.Button(test) { - test = "\(Int.random(in: 1...10))" + Backend1.Button(test.test) { + test.test = "\(Int.random(in: 1...10))" } Backend1.Menu("Hi") { Backend1.Menu("World") {