使用Navigator.popUntil和不带固定名称的路由

时间:2018-07-26 09:35:17

标签: dart flutter

是否可以将Navigator.popUntil与没有固定名称的路由一起使用?

我通过以下方式创建了一条路线:

  final _key_homepage = new GlobalKey<HomePageState>();

    Navigator.pushReplacement(context, new MaterialPageRoute(
      builder: (BuildContext context) =>  new HomePage(key: _key_homepage, somevariable1: 'some value', somevariable2: 'some value 2'),
    ));

现在,当我在任何屏幕上收到推送通知并显示弹出消息时,其中一个按钮应指向上面列出的路线。该路线已创建,必须“弹出”。怎么做?

使用命名路由,可以这样完成:

 new FlatButton(
    child: new Text('Go to homepage'),
    onPressed: () {
      Navigator.popUntil(context, ModalRoute.withName('/homepage'));  

     //how to do the same without ModalRoute.withName('/homepage')

    },
)

“键”和所需路线的上下文均可用。但是,重新创建路由感觉不是一个好的解决方案,因为原始路由创建包含一些变量(somevariable1,somevariable2等)。

有什么方法可以实现?

3 个答案:

答案 0 :(得分:10)

您应该在推动路线时添加设置;带有自定义名称

version: '3.7'

然后,您可以像命名路由一样使用Navigator.pushReplacement( context, MaterialPageRoute( settings: RouteSettings(name: "Foo"), ), );

popUntil

答案 1 :(得分:0)

如果您不使用命名路线,或者我们想将导航器设为“首次激活”,则可以使用

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

答案 2 :(得分:0)

Check this article对Flutter中用于导航的所有方法都有很好的解释。