无状态小部件内有状态小部件,反之亦然

gen*_*ser 10 flutter flutter-state

在以下情况下,Flutter 重建/重绘如何工作:

  • 在有状态小部件内创建无状态小部件。
  • 在无状态小部件内创建有状态小部件。

每次有状态小部件状态发生变化时,有状态小部件内的无状态小部件是否都会渲染?

有状态小部件可以在无状态小部件内更改吗?它如何影响无状态小部件?

小智 26

首先这里是flutter文档中无状态和有状态的区别

无状态小部件永远不会改变。Icon、IconButton 和 Text 是无状态小部件的示例。无状态小部件是 StatelessWidget 的子类。

有状态小部件是动态的:例如,它可以响应用户交互触发的事件或接收数据时更改其外观。

对于第一个场景“在有状态小部件内创建无状态小部件”。

当我们更新 Stateful widget 的状态时,它将重新运行其构建函数,当无状态 widget 是该构建函数的一部分时,flutter 将检查其输入数据是否已更改,如果没有更改,它将返回相同的实例小部件,如果它发生了更改,那么它将从无状态小部件创建另一个实例并丢弃前一个实例。

这是本文中上述场景的说明

在此输入图像描述

对于第二个场景“在无状态小部件内创建有状态小部件”。

让我们首先尝试说明小部件树以直观地了解正在发生的情况。

              Stateless (1)
               /      \
              /        \
      (2) Stateful   Stateless (3)
Run Code Online (Sandbox Code Playgroud)

如果我们更新有状态小部件 (2) 的状态,(1) 和 (3) 都不会受到影响,但有状态小部件中的构建函数将再次被调用。

如果父级 (1) 的输入发生变化,则 (1) 和 (2) 将再次重建,flutter 将检查 (3) 是否有输入数据更改,它也会重建,如果没有,它将返回相同的值实例。

希望这能回答您的问题并让您更好地理解 flutter 如何呈现其 UI

注意:这是我目前对 flutter 处理重建有状态和无状态小部件的方式的理解,如果有任何不正确的地方,请随时纠正我。