未将Flutter Navigation push放置在第一个活动中时,替换功能不起作用

Ari*_*aya 2 android dart flutter

我有几页。
1.开始页面
2.页面2
3.页面3
4.主菜单

从1-> 2.和2->3。我使用它进行导航:

Navigator.of(context).push(new MaterialPageRoute<MyPage>(
                    builder: (BuildContext context) {
                      return new MyPage();
                    },
                  ));
Run Code Online (Sandbox Code Playgroud)

并为3->4。我想使用这个(Push Replacement,不会返回),但是它不起作用并且像普通的Push一样工作:

Navigator
        .of(context)
        .pushReplacement(new MaterialPageRoute(builder: (BuildContext context) {
      return new MainMenuPage();
    }));
Run Code Online (Sandbox Code Playgroud)

令人困惑。

Fer*_*cha 7

我遇到了同样的问题,猜想是由于我的3号屏幕来自一个对话框,而我之前没有对其进行处理。所以我所做的是:

Navigator.of(context).popUntil((route) => route.isFirst);
Run Code Online (Sandbox Code Playgroud)

然后

Navigator.pushReplacement(context, MaterialPageRoute(builder: (BuildContext context) => NewPage()));
Run Code Online (Sandbox Code Playgroud)

  • 我也不知道第一行。它们一起形成了“pushNewRoot”的 Voltron,这对于路由的堆栈管理来说是一个很好的补充。 (3认同)
  • 它有奇效。我认为 Flutter 团队/贡献者应该更好地记录这个 Navigator API 的预期行为。 (2认同)

Era*_*rlu 6

尝试这个

Navigator.of(context).pushNamedAndRemoveUntil('/routeName', (route) => false);
Run Code Online (Sandbox Code Playgroud)


Tab*_*aba 5

好吧,pushReplacement()不应该阻止您返回任何页面。顾名思义,它用路由堆栈中的当前页面替换您尝试打开的新页面。

例如,当你在第二页时,使用pushReplacement()方法打开第三页,当你点击后退按钮时,你会跳到第一页并跳过第二页。

为了更清楚,您可以像这样导航到第四页:

[ 1 --push()--> 2 --pushReplacement()--> 3 --pushReplacement()--> 4] 当您点击后退按钮时,您将进入第一页。

现在,如果您想控制 android 中的 backButton,您可以使用该WillPopScope()方法。