I pushed three screens: ScreenOne
> ScreenTwo(1)
> ScreenTwo(2)
I'm at the second instance of ScreenTwo
now, but I want to remove the first instance of ScreenTwo
from the stack, so it should be ScreenOne
> ScreenTwo(2)
.
When launching ScreenTwo(2)
I know I shouldn't remove ScreenTwo(1)
from the stack yet, so I can't just call Navigator.replace()
. I really need to have ScreenOne
> ScreenTwo(1)
> ScreenTwo(2)
for some time, and then remove the first instance of ScreenTwo(1)
.
How I can handle it? Navigator.pop()
and similars only take into account the screen or screens on top of the stack.
If someone needs more context, this is for a phone app. Not an app for phones, but an app that mimics the behavior of a phone. So in reality, we have HomeScreen
> CallScreen(Caller1)
> CallScreen(Caller2)
. As the app can handle different calls at a time the first approach has been to map every call to a CallScreen
and let every screen handle their own call events, so the first call can finish while the user is talking in the second one.
CodePudding user response:
As discussed in this post: How can I pop to specific screen in flutter
I quote:
If you didn't define any route in the MaterialApp then you need to define at the time of push.
Navigator.of(context).push(
MaterialPageRoute(builder: (_) {
return SecondPage();
},
settings: RouteSettings(name: 'SecondPage',),
));
You need to define the same route name
Navigator.of(context).popUntil((route){
return route.settings.name == 'SecondPage';
})
;
Or as an alternative if you did define the routes you can use that:
pushNamedAndRemoveUntil(
'/BottomNavigation', (Route<dynamic> route) => false);
CodePudding user response:
In this case it is most suitable that you go from screen1 > Screen2 > replace previous with Screen3
Use this navigation from screen 2 to screen 3. Navigator.pushReplacementNamed(context,"Third Screen");