美文网首页Flutter
Flutter全局Context实现

Flutter全局Context实现

作者: 丶切切切切梨 | 来源:发表于2019-10-17 14:42 被阅读0次

前言

开发过程中遇到了一个问题,需要在网络请求拦截器中统一处理登录失效的错误码,给出提示后跳转到登录页面让用户重新去登录,于是开始写Navigator.of(context)???context这里报红的时候就意识到问题不对了,我在网络请求处理类里,根本不知道当前界面是什么,哪来的context,于是开始寻找之路。

任意地方跳转界面解决

首先点进了Navigator.of(context)这个方法,发现这个方法返回了一个NavigatorState对象,即Navigator对象的state。

  static NavigatorState of(
    BuildContext context, {
    bool rootNavigator = false,
    bool nullOk = false,
  }) 

想起了MaterialApp的navigatorKey属性,于是解决方案出来了:
1、定义NavigatorState的GlobalKey

static GlobalKey<NavigatorState> navigatorState = new GlobalKey();

2、将这个key传给MaterialApp的navigatorKey属性。

 MaterialApp(
   navigatorKey: navigatorState,
  );

3、在需要跳转的地方调用navigatorState.currentState获取到NavigatorState进行界面跳转即可。

Flutter全局Context

虽然解决了问题,但是是通过跳过context获取NavigatorState解决的,做Android开发的都知道,我们可以在application中使用getApplicationContext()方法来获取全局的context,那么怎么在Flutter中获取全局context呢?
Flutter的中的widget是以Widget树形式存在的,能拿到顶层树的context,不就可以了么。实现:
1、定义 static BuildContext appContext;
2、将主页最外层context赋值给appContext。
3、在需要的地方使用即可。

相关文章

网友评论

    本文标题:Flutter全局Context实现

    本文链接:https://www.haomeiwen.com/subject/stbumctx.html