如何在Flutter应用中重置基本路线-弹出所有路线并使用导航器将其替换为新路线

时间:2018-08-27 23:19:34

标签: dart flutter navigator

Flutter的新手,如果这很明显,请原谅我,但是我已经阅读了文档并尝试了许多Navigator选项,但是它们都不如我所愿。问题集:我们有一系列复杂的(好,半复杂)屏幕等,它们处理登录/授权/注册过程。在路由堆栈上,这可以降低到3或4级。很好-不用担心。

问题是,当我们获得成功的登录事件时(通过一些不同的路径),并且想要转到“主页”页面。一旦我们进入主页,它应该是Route树的新“根”(我确信这不是正确的术语-但我认为这个想法很可靠)。

因此,假设我们的位置可能降低了1/2/3甚至4级,并且希望“弹出”并将整个堆栈(请使用任何过渡事件)替换为新的顶级根目录-神奇的Navigator设置了或方法会干净利落地做到这一点?

我当前的(可怕的)方法是将“ pop()”传递给各个级别并进行Navigator.pushReplacementNamed()调用(此处均已命名路由),但这不是通用解决方案(必须确切知道如何很多级别),更糟糕的是,它会导致屏幕上的“动画”过渡到“流行音乐”,每个pop()的瞬间瞬间看起来都不太好。

TIA!

3 个答案:

答案 0 :(得分:15)

导航器不仅仅公开MaterialPageRoute。您可以执行以下操作:

pop

这基本上会推开家门,并删除所有新路线后面的路线

答案 1 :(得分:2)

好消息是我们现在可以使用pushReplacementNamed

Navigator.pushReplacementNamed(context, '/');

(Channel master,v1.15.4-pre.97,我不确定以前的版本可以做到这一点)

答案 2 :(得分:1)

尝试以下代码:

f.readlines(23:27)

如果您不想过渡,可以覆盖或扩展 Navigator.pushAndRemoveUntil( context, MaterialPageRoute( builder: (BuildContext context) => YourInitialPage(), ), ModalRoute.withName('/'));