BuildContext
做了什么,我们从中得到了什么信息?
https://docs.flutter.dev/flutter/widgets/BuildContext-class.html只是不清楚。
https://flutter.dev/widgets-intro/#basic-widgets在术语 BuildContext
的第 9 个实例中,有一个示例,但尚不清楚它是如何使用的。它是让我迷失的更大代码集的一部分,因此我很难理解 BuildContext
是什么。
有人可以用简单/非常基本的术语解释一下吗?
最佳答案
BuildContext
就像它的名字所暗示的那样,是构建特定小部件的上下文。
如果你以前做过一些 React,那么这个上下文有点类似于 React 的上下文(但使用起来更流畅);有一些奖金。
一般来说,上下文有 2 个用例:
- 与 parent 互动(主要是获取/发布数据)
- 在屏幕上渲染后,获取您的屏幕尺寸和位置
第二点比较少见。另一方面,几乎所有地方都使用第一点。
例如,当您要推送新路由时,您将执行 Navigator.of(context).pushNamed('myRoute')
。
注意这里的上下文。它将用于获取树中上面最接近的 NavigatorState
小部件实例。然后在该实例上调用方法 pushNamed
。
很酷,但是我什么时候想要使用它?
BuildContext 在您想要向下传递数据时非常有用 不必手动将其分配给每个小部件的配置,例如;你会想在任何地方访问它们。但是您不想将它传递给每个构造函数。
您可能会创建一个全局或单例;但是当 confs 更改时,您的小部件不会自动重建。
在这种情况下,您使用 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)
的小部件将在配置更改时自动重建。
很棒吧?
关于flutter - BuildContext 在 Flutter 中做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49100196/