使用Navigator.popUntil和没有固定名称的路由

And*_*rew 5 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'),
    ));
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

    },
)
Run Code Online (Sandbox Code Playgroud)

"关键"和所需路线的上下文都可用.然而,再次重新创建路线并不是一个好的解决方案,因为原始路径创建包括一些变量(somevariable1,somevariable2等).

有没有办法实现这个目标?

You*_*lid 22

如果你不使用命名路由或者我们希望导航器首先激活,你可以使用

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

  • 这是完美的,它显示了初始主页(如果您以这种方式构建应用程序) (2认同)

Rém*_*let 14

你应该在推路时添加一个设置; 使用自定义名称

Navigator.pushReplacement(
  context,
  MaterialPageRoute(
    settings: RouteSettings(name: "Foo"),
    builder: ...,
  ),
);
Run Code Online (Sandbox Code Playgroud)

然后你可以popUntil像使用命名路线一样使用

Navigator.popUntil(context, ModalRoute.withName("Foo"))
Run Code Online (Sandbox Code Playgroud)