美文网首页
FLutter 获取全局 context

FLutter 获取全局 context

作者: LongFei_Brook | 来源:发表于2022-04-20 10:20 被阅读0次

    有时,在网络工具类中,要对数据做弹框,或对没有登录的 api 做跳转登录页面时,需要用到 context。但在这些类中,又没有 context。这时,就需要一个全局的 context 了,在任意地方跳转界面。

    什么是 Context?
    build 方法有一个 context 参数,它是 BuildContext 类的一个实例,表示当前 widget 在 widget 树中的上下文,每一个 widget 都会对应一个 context 对象(因为每一个 widget都是 widget 树上的一个节点)。实际上, context 是当前 widget 在 widget 树中位置中执行”相关操作“的一个句柄,比如它提供了从当前 widget 开始向上遍历 widget 树以及按照 widget 类型查找父级 widget 的方法。

    全局取得 Context
    可以通过 navigatorKey 的方式
    首先我们进入 Navigator.of(context) 这个方法,发现这个方法返回了一个 NavigatorState 对象,即 Navigator 对象的 state。

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

    })
    然后在 MaterialApp 有一个 navigatorKey 属性,所以如下取得。

    入口文件 main 文件

    void main() {
      runApp(MyApp());
    }
    

    // 定义全局 navigatorKey

    class NavKey{
      static final navKey = new GlobalKey<NavigatorState>();
    }
    
       // 配置 MaterialApp 的 navigatorKey
      Widget build(BuildContext context) {
        return MaterialApp(
            navigatorKey: navigatorKey,
        );
      }
    

    应用
    1.Navigator 跳转
    // 引用之前的定义
    import 'package:smarthome/main.dart';

    navigatorKey.currentState.pushName('/');
    

    2.获取 context
    BuildContext context = navigatorKey.currentState.overlay.context
    注意 通过这种方式获取的 context 在某些情况下需要放在以下代码内使用

    Future.delayed(Duration(seconds:0)).then((onValue)  {
    });
    

    相关文章

      网友评论

          本文标题:FLutter 获取全局 context

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