引言
StatefulWidget 的具体逻辑都在其对应的 State
中,所以很多时候,我们需要获取父节点的State对象来调用一些方法,比如 Scaffold 组件对应的状态类 ScaffoldState 中就定义了打开 SncakBar(路由底部提示条)的方法。
在子节点中获取父级节点的
State
对象,小轰在项目中使用过如下两种方式。
-
通过 context 获取
context 对象有一个 findAncestorStateOfType()
方法,该方法可以从当前节点沿着 widget 树向上查找指定类型的 StatefulWidget 对应的 State 对象。
ScaffoldState _state = context.findAncestorStateOfType<ScaffoldState>();
-
通过 globalKey 获取
...省略
final GlobalKey<NavigatorState> navigatorKey = new GlobalKey<NavigatorState>();
class MyApp extends StatelessWidget {
MyApp() {
}
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: navigatorKey,
);
}
}
...省略
//使用方式
BuildContext context = navigatorKey.currentState.overlay.context
网友评论