BuildContext就像其名称所暗示的那样,是构建特定小部件的上下文。
如果您曾经做过一些React,那么该上下文类似于React的上下文(但使用起来更顺畅);有一些奖金。
一般而言,上下文有2个用例:
- 与您的父母互动(主要是获取/发布数据)
- 在屏幕上渲染后,获取屏幕尺寸和位置
第二点有点罕见。另一方面,第一点几乎在所有地方都被使用。
例如,当您想推一条新路线时,您将这样做
Navigator.of(context).pushNamed('myRoute')。
注意这里的上下文。它将用于获取
NavigatorState树中上方最接近的小部件实例。然后
pushNamed在该实例上调用该方法。
很酷,但是 我 什么时候要使用它?
当您想要向下传递数据 而 不必手动将其分配给每个小部件时,BuildContext确实有用。配置例如;
您将需要在任何地方访问它们。但是您不想在每个构造函数上传递它。
您可能会创建一个整体或一个单例;但是当conf更改时,您的小部件将不会自动重建。
在这种情况下,请使用
InheritedWidget。有了它,您可能会编写以下内容:
class Configuration extends InheritedWidget { final String myConf; const Configuration({this.myConf, Widget child}): super(child: child); @override bool updateShouldNotify(Configuration oldWidget) { return myConf != oldWidget.myConf; }}
然后,以这种方式使用它:
void main() { runApp( new Configuration( myConf: "Hello world", child: new MaterialApp( // usual stuff here ), ), );}
因此,您现在可以在应用程序内的 任何地方 使用来访问这些配置
BuildContext。通过做
final configuration = context.inheritFromWidgetOfExactType(Configuration);
更酷的是,当配置更改时, 所有 调用的小部件
inheritFromWidgetOfExactType(Configuration)都会自动重建。
很棒吧?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)