Flutter:如何获取State对象

1,939 阅读1分钟

引言

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