我有几页。
1.起始页
2.第二页
3.第三页
4.主菜单
从1 -〉2.和2 -〉3.我用这个来导航:
Navigator.of(context).push(new MaterialPageRoute<MyPage>(
builder: (BuildContext context) {
return new MyPage();
},
));
对于3 -〉4.我想使用这个(Push Replacement,不会返回),但它不起作用,表现得像正常的Push:
Navigator
.of(context)
.pushReplacement(new MaterialPageRoute(builder: (BuildContext context) {
return new MainMenuPage();
}));
困惑。
8条答案
按热度按时间bn31dyow1#
我也遇到了同样的问题,我猜这是因为我的屏幕#3来自一个对话框,而我之前没有处理它。所以我做的是:
那么
cpjpxq1n2#
pushReplacement()
不会阻止你返回任何页面。正如它的名字所示,它会替换你试图打开的新页面,并使用路由堆栈中的当前页面。例如,当你在第二页时,使用
pushReplacement()
方法并打开第三页,当你点击后退按钮时,你将转到第一页并跳过第二页。为了让它更清楚,你可以像这样导航到第四页:
[ 1 --push()--> 2 --pushReplacement()--> 3 --pushReplacement()--> 4]
,当你点击后退按钮,你会得到第一页。现在如果你想在android中控制backButton,你可以使用
WillPopScope()
方法。uxhixvfz3#
试试这个
83qze16e4#
现在我使用另一种方法,使用pushReplacement代替push进行导航,并添加WillPopScope进行返回。因此,当我到达屏幕3时。替换是工作。
k4emjkb15#
我认为你不想使用屏幕3,如果用户一旦到达屏幕4,那么你可以使用Navigator.pop(context);在将控制转移到屏幕4之前。
vd2z7a6w6#
请尝试
pushAndRemoveUntil()
,这就是我解决这个问题的方法。zbdgwd5y7#
尽管你的WillPopScope解决方案会起作用,并且是一些导航工作流的适当解决方案,但我发现问题的根源是更好地控制Flutter
Navigator
,特别是确保Back按钮和应该在Navigator
堆栈上的内容,在应用程序内的任何给定用户操作中,所有导航都使用命名路由,这篇文章是一个很好的指南,声明Routes
,然后在导航器中使用命名路由,以确保导航器堆栈始终包含您想要的任何给定导航流的确切路由:https://medium.com/flutter-community/flutter-push-pop-push-1bb718b13c31
bxjv4tth8#
我有一个类似的问题,我从1(页面)导航到2(表格与将弹出)到3(页面)我想从3到1(没有看到表格页面)
所以我用了这个