FLutter 获取全局 context

关键字 :Flutter APP
 前言

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

什么是 Context?

build 方法有一个 context 参数,它是 BuildContext 类的一个实例,表示当前 widgetwidget 树中的上下文,每一个 widget 都会对应一个 context 对象(因为每一个 widget都是 widget 树上的一个节点)。实际上, context 是当前 widgetwidget 树中位置中执行”相关操作“的一个句柄,比如它提供了从当前 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
final GlobalKey navigatorKey = new GlobalKey();

class MyApp extends StatelessWidget {
MyApp() {
}

@override
Widget build(BuildContext context) {
return MaterialApp(
// 配置 MaterialApp 的 navigatorKey
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) {
});

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论