I have a menu view where I push a game view. When I dismiss game view and push it again, the pushed view is old game view. I want it to be a new view. How to do this?
struct MenuView: View {
@State private var showGameView: Bool = false
var body: some View {
NavigationView {
VStack {
NavigationLink(
destination: gameView,
isActive: $showGameView) {
EmptyView()
}
Button {
showGameView = true
} label: {
Text("Play")
}
}
}
.navigationViewStyle(.stack)
}
@MainActor
@ViewBuilder private var gameView: some View {
let gameModel = MyGameModel.myGameModel()
ContentView()
.environmentObject(gameModel)
}
}

Rather using an
@EnvironmentObject, you should make theMyGameModela@StateObjectinContentView.This causes
modelto be initialised withMyGameModel.myGameModel(), and the previous game model object (if any) to be deinitialised, whenever a newContentViewis (re)created.