BuildContex +小部件树

时间:2019-04-04 14:51:05

标签: mobile dart flutter

我正在关注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方法期间返回的小部件在树中的位置(或由于框架而默认发生这种情况)

1 个答案:

答案 0 :(得分:1)

build 方法有条件地构建其后代时,通常会发生这种树更改

示例:

Widget build(BuildContext context) {
  return condition
    ? Foo()
    : Bar(child: Foo());
}

使用这种 build 方法,当Foo更改时,condition小部件的 BuildContext 也将更改。