BuildContext
是做什么的,我们从中得到了什么信息?
https://docs.flutter.io/flutter/widgets/BuildContext-class.html是不清楚的.
在术语BuildContext
的第9个实例中有一个例子,但不清楚它是如何使用的.它是一个更大的代码集的一部分,它让我迷失了方向,所以我很难理解BuildContext
到底是什么.
有人能用简单/非常基本的术语解释一下吗?
BuildContext
是做什么的,我们从中得到了什么信息?
https://docs.flutter.io/flutter/widgets/BuildContext-class.html是不清楚的.
在术语BuildContext
的第9个实例中有一个例子,但不清楚它是如何使用的.它是一个更大的代码集的一部分,它让我迷失了方向,所以我很难理解BuildContext
到底是什么.
有人能用简单/非常基本的术语解释一下吗?
正如其名称所暗示的那样,BuildContext
是构建特定小部件的上下文.
如果您以前做过一些React,那么该上下文与React的上下文类似(但使用起来更流畅);还有一些 prize .
一般来说,上下文有两种用例:
第二点很少见.另一方面,第一点几乎无处不在.
例如,当您想要推送一条新路由时,您需要做Navigator.of(context).pushNamed('myRoute')
次.
请注意这里的上下文.它将用于获取树中最接近的NavigatorState
个小部件的实例.然后在该实例上调用方法pushNamed
.
Cool, but when do 100 want to use it ?
例如,当您想要向下传递数据without时,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
),
),
);
}
多亏了这一点,现在你的应用程序中有everywhere,你可以使用BuildContext
来访问这些配置.通过做
final configuration = context.inheritFromWidgetOfExactType(Configuration);
更酷的是,当配置发生变化时,all个调用inheritFromWidgetOfExactType(Configuration)
的小部件将自动重建.
太棒了,对吧?