当未放置在第一个活动中时,Flutter导航推送“替换”不起作用

mrzz3bfm  于 2023-03-24  发布在  Flutter
关注(0)|答案(8)|浏览(251)

我有几页。
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();
    }));

困惑。

bn31dyow

bn31dyow1#

我也遇到了同样的问题,我猜这是因为我的屏幕#3来自一个对话框,而我之前没有处理它。所以我做的是:

Navigator.of(context).popUntil((route) => route.isFirst);

那么

Navigator.pushReplacement(context, MaterialPageRoute(builder: (BuildContext context) => NewPage()));
cpjpxq1n

cpjpxq1n2#

pushReplacement()不会阻止你返回任何页面。正如它的名字所示,它会替换你试图打开的新页面,并使用路由堆栈中的当前页面。
例如,当你在第二页时,使用pushReplacement()方法并打开第三页,当你点击后退按钮时,你将转到第一页并跳过第二页。
为了让它更清楚,你可以像这样导航到第四页:
[ 1 --push()--> 2 --pushReplacement()--> 3 --pushReplacement()--> 4],当你点击后退按钮,你会得到第一页。
现在如果你想在android中控制backButton,你可以使用WillPopScope()方法。

uxhixvfz

uxhixvfz3#

试试这个

Navigator.of(context).pushNamedAndRemoveUntil('/routeName', (route) => false);
83qze16e

83qze16e4#

现在我使用另一种方法,使用pushReplacement代替push进行导航,并添加WillPopScope进行返回。因此,当我到达屏幕3时。替换是工作。

k4emjkb1

k4emjkb15#

我认为你不想使用屏幕3,如果用户一旦到达屏幕4,那么你可以使用Navigator.pop(context);在将控制转移到屏幕4之前。

vd2z7a6w

vd2z7a6w6#

请尝试pushAndRemoveUntil(),这就是我解决这个问题的方法。

Navigator.of(context).pushAndRemoveUntil(
                                          MaterialPageRoute(
                                              builder: (context) => HomePage()),
                                              (route) => false
                                        );
zbdgwd5y

zbdgwd5y7#

尽管你的WillPopScope解决方案会起作用,并且是一些导航工作流的适当解决方案,但我发现问题的根源是更好地控制Flutter Navigator,特别是确保Back按钮和应该在Navigator堆栈上的内容,在应用程序内的任何给定用户操作中,所有导航都使用命名路由,这篇文章是一个很好的指南,声明Routes,然后在导航器中使用命名路由,以确保导航器堆栈始终包含您想要的任何给定导航流的确切路由:
https://medium.com/flutter-community/flutter-push-pop-push-1bb718b13c31

bxjv4tth

bxjv4tth8#

我有一个类似的问题,我从1(页面)导航到2(表格与将弹出)到3(页面)我想从3到1(没有看到表格页面)
所以我用了这个

Navigator.of(context).push(
            MaterialPageRoute(
                builder: (_) => GenericPage(),
                )).then((value) => Navigator.pop(context));

相关问题