我目前正在开发一款使用NavigationStack
的应用程序.我想知道我应该把NavigationPath
变量放在哪里,这样我就可以在任何地方修改它.
我试图将其作为State
变量放在根视图中,但似乎很难在深度嵌套的视图中修改它.
struct RootView: View {
@State var path = NavigationPath()
var body: some View {
NavigationStack(path: $path) {
// ...
}
}
}
struct SubView: View {
var body: some View {
Button("Push to root") {
// how should I access `path` from here?
}
}
}
我也试图把它作为一个全局变量,但这可能会导致导航在所有场景之间共享,这不是我的意图.
class Router: ObservableObject {
static var shared = Router()
@Published var path = NavigationPath()
}
struct RootView: View {
@ObservedObject var router = Router.shared
var body: some View {
NavigationStack(path: $router.path) {
// ...
}
}
}
struct SubView: View {
@ObservedObject var router = Router.shared
var body: some View {
Button("Push to root") {
router.path = []
}
}
}
如果有人能提供一个可行的设计或任何建议,我将不胜感激.