Flutter 无Context跳转,处理登录失效

问题描述

在实际开发中,都会遇到401登录失效的场景,一般处理是关闭所有页面并跳转到登录,这种场景一般都会封装在网络请求中的统一处理错误中。那如果我要实现在项目的任何地方都可以push一个新页面的话,而这个地方有可能获取不到context,所以这个时候,就需要实现无context跳转。

解决方案

利用GlobalKey
1.在Flutter中,利用GolbalKey利用获取到对应Widget的State对象,来获取到NavigatorState对象
2.MaterialApp中包装了WidgetsApp,而WidgetsApp包装了Navigator,并且将 Navigator的key属性,然后利用这个key去获取到NavigatorState对象。

代码实现

1.新建类,在类中定义static的navigatorKey

class Router {
  static GlobalKey navigatorKey = GlobalKey();
}

2.在main.dart中的MaterialApp下设置navigatorKey

MaterialApp(
          title: 'app_name',
          theme: kLightTheme,
          navigatorKey: Router.navigatorKey, //设置在这里

3.用法

Router.navigatorKey.currentState.pushNamed("你的路由")
问题2

在上述场景中,登录失效后,应该关闭所有页面,跳转到登录页面。这时候可以使用pushNamedAndRemoveUntil

Router.navigatorKey.currentState.pushNamedAndRemoveUntil("/login_guide",
                    ModalRoute.withName("/"))

移除所有界面,保留"/"页面,并且重新跳转到login_guide界面,这时候将销毁栈内除了login_guide的页面,点击直接去栈内login_guide,这时login_guide会重新build。
这样就实现了登录失效跳转到登录界面,并且不想登录还能用户直接返回到首页。

你可能感兴趣的:(Flutter 无Context跳转,处理登录失效)