FLutter 获取全局 context

有时,在网络工具类中,要对数据做弹框,或对没有登录的 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();
}
   // 配置 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)