我正在关注Flutter关于BuildContext类的文档,因为我不清楚如何以及为什么使用这个类。
Widget build(BuildContext context) {
// here, Scaffold.of(context) returns null
return Scaffold(
appBar: AppBar(title: Text('Demo')),
body: Builder(
builder: (BuildContext context) {
return FlatButton(
child: Text('BUTTON'),
onPressed: () {
// here, Scaffold.of(context) returns the locally created Scaffold
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('Hello.')
));
}
);
}
)
);
}
我不明白这一段:
特定小部件的 BuildContext 可以随时间更改位置 当小部件在树周围移动时。正因为如此,价值观 从此类上的方法返回的缓存不应超出 单个同步函数的执行。
BuildContext 对象实际上是 Element 对象。构建上下文 接口用于阻止直接操作元素 对象。
当小部件在树周围移动时->这是如何发生的?
根据我的理解(如果我在这里错了,请纠正我),小部件树基本上是小部件如何"堆叠"以及它们如何相互构建。由于不建议在 CustomWidget 类中将子小部件作为属性引用,因此如何更改在构建方法期间返回的小部件的树中的位置(或者由于框架而默认情况下如何发生这种情况)
当build方法有条件地生成其后代时,通常会发生此树更改
例:
Widget build(BuildContext context) {
return condition
? Foo()
: Bar(child: Foo());
}
使用这种构建方法,Foo
小部件的BuildContext会在condition
更改时发生变化。