flutter中StatefulWidget与Stateless
2025-09-23 本文已影响0人
傲骨天成科技
在 Flutter 中,StatefulWidget 和 StatelessWidget 是两种核心的 Widget 类型,主要区别在于是否拥有可变状态(State) 以及适用场景:
- 核心区别:状态管理
StatelessWidget(无状态组件)自身不包含可变状态,一旦创建,其 UI 展示完全由构造函数传入的参数(final 修饰)决定,无法自行改变。可以理解为 “静态组件”,数据变化时必须通过父组件重新创建才能更新 UI。
StatefulWidget(有状态组件)包含可变状态(通过 State 类管理),可以在生命周期内动态修改状态,且状态变化后会触发 build 方法重建 UI。可以理解为 “动态组件”,支持用户交互、数据更新等场景。
-
其他关键区别
image.png
以上是网上说的宽泛的理解,对于个人理解其实不够具体。
下面是我的理解:
状态管理也能在stateLessWidget中使用,其实statelessWidget和sateFullWidget的区别就只有一个调用setState可以重新绘制build方法。
在stateLessWidget中如果需要内容随着数据改变其实可以在外部包裹一个statefullWidget,其实比如三方库provider可以使得statelessWidget组件具有状态也就是在最外部是通过statefullWidget包裹的,然后通过inheritedWidget和ChangeNotifier的配合实现了改变widget子树的状态。如果外部不通过statefullWidget包裹子组件也可以通过ListenableBuilder来监听具体的某个数据model来实现状态的监听,但是ListenableBuilder最终也是继承与StatefullWidget的。或者通过stream的形式(StreamBuilder也是最终继承于StatefullWidget的)。
所以官方给的定义其实是一针见血的本质。