【问题标题】:BuildContex + widget treeBuildContext + 小部件树
【发布时间】:2019-08-26 09:20:57
【问题描述】:

我关注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 对象。构建上下文 接口用于阻止对 Element 的直接操作 对象。

随着小部件在树周围移动 -> 这是怎么发生的?

根据我的理解(如果我在这里错了,请纠正我)小部件树基本上是小部件如何“堆叠”以及它们如何相互构建。由于不建议在您的 CustomWidget 类中将子小部件作为属性引用,因此如何更改在构建方法期间返回的小部件在树中的位置(或者由于框架,默认情况下如何发生这种情况)

【问题讨论】:

    标签: mobile dart flutter


    【解决方案1】:

    这种树变化通常发生在 build 方法有条件地构建其后代时

    例子:

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

    通过这样的build方法,Foo widget的BuildContext会随着condition的变化而变化。

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多