I am currently trying to make a widget with SwiftUI. Let\'s say my code is like this:
struct WidgetView: View {
var data : DataProvider.Entry
var body
Here is possible approach
var body: some Scene {
@StateObject private var appState = AppState()
WindowGroup {
ContentView()
.environmentObject(appState)
.onOpenURL(perform: { url in
appState.handle(url) // redirect to app state
})
}
}
and AppState
can have, for example
class AppState: ObservableObject {
@Published var appScreen: _SomeEnumType_
func handle(url: URL) {
// ... update `appScreen` here correnspondingly
}
}
so inside ContentView
depending on app state you can switch shown views.
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
}
I got this method performed in SceneDelegate
when I clicked the widget. You can handle your url and redirect to the ViewController