BuildContex +小部件树

问题描述 投票:0回答:1

我关注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类中将子窗口小部件作为属性引用,因此如何更改构建方法期间返回的窗口小部件树中的位置(或者由于框架,默认情况下如何发生这种情况)

mobile dart flutter
1个回答
1
投票

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

例:

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

使用这种构建方法,当Foo更改时,condition小部件的BuildContext会发生变化。

© www.soinside.com 2019 - 2024. All rights reserved.