flutter:在 state 代码外如何获取 state 对象

引言

StatefulWidget 的具体逻辑都在其对应的 State 中,所以很多时候,我们需要获取父节点的State对象来调用一些方法,比如 Scaffold 组件对应的状态类 ScaffoldState 中就定义了打开 SncakBar(路由底部提示条)的方法。

在子节点中获取父级节点的 State 对象,小轰在项目中使用过如下两种方式。

  • 通过 context 获取

context 对象有一个 findAncestorStateOfType()方法,该方法可以从当前节点沿着 widget 树向上查找指定类型的 StatefulWidget 对应的 State 对象。

ScaffoldState _state = context.findAncestorStateOfType();
  • 通过 globalKey 获取
...省略

final GlobalKey navigatorKey = new GlobalKey(); 
class MyApp extends StatelessWidget {
  MyApp() {
  }
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      navigatorKey: navigatorKey,
    );
  }
}
...省略
//使用方式
BuildContext context = navigatorKey.currentState.overlay.context

你可能感兴趣的:(flutter:在 state 代码外如何获取 state 对象)