Flutter 关闭所有页面之无context

2,751 阅读1分钟

有时候我们需要根据关闭当前其他所有页面,跳转到某个页面,可以这样处理:

 Navigator.of(context).pushAndRemoveUntil(
        new MaterialPageRoute(builder: (context) => new LoginPage()),
        (route) => route == null);

那么问题来了,如果在page页面有buildcontext可以这样处理,但是在一些没有conext上下文的地方如何处理呢,这里就需要设置一个全局context,用到一个NavigatorState类了,代码如下:

class Global{
  //全局路由跳转上下文,可去除contex
  static final navKey = GlobalKey<NavigatorState>();
}

在main.dart里面定义

 return new MaterialApp(
      navigatorKey: Global.navKey, )

这样我们就可以随时随地的调用了:

Global.navKey.currentState.pushAndRemoveUntil(
        new MaterialPageRoute(builder: (context) => new LoginPage()),
        (route) => route == null);

顺便说下,new LoginPage()会执行登录页面的initstate(), (route) => route == null)会将所有其他页面关闭,同时执行他们的dispose()方法。