吧务
level 9
孟徽杭
楼主
在 Flutter 的世界里,一切皆为 Widget(组件)。理解 StatelessWidget 与 StatefulWidget 的区别,本质上是在理解“数据是如何驱动界面更新的”。
可以把 Widget 想象成一张“快照”。StatelessWidget(无状态组件)就像是一张洗出来的纸质照片。当你创建它时,你把数据(比如标题文字、图标颜色)传给它,它就会按照这些参数渲染出界面。一旦渲染完成,这张照片就固定了。如果外部环境变了,照片本身不会自己“动”起来。如果你想改变这张照片的内容,唯一的办法是撕掉旧的,重新洗一张新的。在代码层面,这意味着只要它的父组件重新构建(Build),它就会带着新的参数被重新创建,但在其生命周期内,它从不主动改变自己。
而 StatefulWidget(有状态组件)则更像是一台平板电脑的屏幕。它不仅显示内容,还拥有一个独立的、能持续存在的“记忆体”,也就是 State(状态对象)。这个 State 对象是独立于 Widget 本身而存在的。当用户点击按钮、网络请求返回或者电量发生变化时,State 对象会捕捉到这些变化,并触发一个魔法函数 setState()。这个函数会告诉 Flutter 框架:“我的记忆变了,请根据新的记忆重新画一下屏幕”。在这个过程中,虽然 Widget 可能被频繁销毁重造,但那个“记忆体”一直都在,从而实现了界面的动态交互。
Stateless 是“所见即所得,所得即固定”;而 Stateful 是“内部有逻辑,界面随心动”。Stateless 追求的是性能的极致和逻辑的纯粹,因为它简单、轻量;Stateful 则承载了 App 的交互灵魂,负责处理那些会随时间或事件改变的数据。

2026年04月12日 04点04分
1
可以把 Widget 想象成一张“快照”。StatelessWidget(无状态组件)就像是一张洗出来的纸质照片。当你创建它时,你把数据(比如标题文字、图标颜色)传给它,它就会按照这些参数渲染出界面。一旦渲染完成,这张照片就固定了。如果外部环境变了,照片本身不会自己“动”起来。如果你想改变这张照片的内容,唯一的办法是撕掉旧的,重新洗一张新的。在代码层面,这意味着只要它的父组件重新构建(Build),它就会带着新的参数被重新创建,但在其生命周期内,它从不主动改变自己。
而 StatefulWidget(有状态组件)则更像是一台平板电脑的屏幕。它不仅显示内容,还拥有一个独立的、能持续存在的“记忆体”,也就是 State(状态对象)。这个 State 对象是独立于 Widget 本身而存在的。当用户点击按钮、网络请求返回或者电量发生变化时,State 对象会捕捉到这些变化,并触发一个魔法函数 setState()。这个函数会告诉 Flutter 框架:“我的记忆变了,请根据新的记忆重新画一下屏幕”。在这个过程中,虽然 Widget 可能被频繁销毁重造,但那个“记忆体”一直都在,从而实现了界面的动态交互。
Stateless 是“所见即所得,所得即固定”;而 Stateful 是“内部有逻辑,界面随心动”。Stateless 追求的是性能的极致和逻辑的纯粹,因为它简单、轻量;Stateful 则承载了 App 的交互灵魂,负责处理那些会随时间或事件改变的数据。
