我正在关注flutter's documentation about the BuildContext class,因为我不清楚如何以及为什么使用此类。
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对象。 BuildContext 接口用于阻止对Element的直接操作 对象。
小部件在树上移动->这是怎么发生的?
根据我的理解(如果我错了,请纠正我),窗口小部件树基本上是窗口小部件“堆叠”的方式以及它们如何相互构建。由于不建议您在CustomWidget类中将子小部件作为属性引用,因此如何更改在build方法期间返回的小部件在树中的位置(或由于框架而默认发生这种情况)
答案 0 :(得分:1)
当 build 方法有条件地构建其后代时,通常会发生这种树更改
示例:
Widget build(BuildContext context) {
return condition
? Foo()
: Bar(child: Foo());
}
使用这种 build 方法,当Foo
更改时,condition
小部件的 BuildContext 也将更改。