How can I pop a view to Root View and the push a second view?

Need help regarding navigation in SwiftUI.

I have three views currently, RootView, DetailView1 and DetailView2. RootView will feature a button to push and show DetailView1, inside DetailView1 there will be a NavigationLink to dismiss DetailView1 to RootView and push DetailView2.

struct DetailView1: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    var body: some View {
        VStack {
            NavigationLink(destination: DetailView2()) {
                Text("Tap to dismiss DetailView and show DetailView2")
                    .onTapGesture {
                        self.presentationMode.wrappedValue.dismiss()
                    }
            }
        }
    }
}

struct DetailView2: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    var body: some View {
        Button(
            "This is DetailView2",
            action: { self.presentationMode.wrappedValue.dismiss() }
        )
    }
}

struct RootView: View {
    var body: some View {
        VStack {
            NavigationLink(destination: DetailView1())
            { Text("This is root view. Tap to go to DetailView") }
        }
    }
}

struct ContentView: View {
    var body: some View {
        NavigationView {
            RootView()
        }
    }
}

Expected behaviour:
User presses NavigationLink in DetailView1, the view is dismissed to RootView and DetailView2 is pushed up.

Current behaviour:
User presses NavigationLink in DetailView1, the view is dismissed to RootView, DetailView2 is not pushed.

Why I need to do this:
My actual app has a root page that leads to a second view with Navigation links to another third page, the third page itself has a link that can lead back to the second view. This results in the user being able to infinitely loop between these two pages which isn’t exactly ideal. Hence, I wish to pop the second view before pushing the third view, so as to discourage the views from stacking onto each other.

Any help would be much appreciated!

Terms of Service

Privacy Policy

Cookie Policy