当前位置: 首页 > news >正文

Flutter:StatelessWidget vs StatefulWidget — 到底该怎么选? - 指南

1. 开场:为什么要讲这个?

80% 的 Flutter 初学者都搞不清楚 “什么时候用 Stateless?什么时候用 Stateful?”

  • 写着写着就全变成 StatefulWidget。

  • 页面卡顿其实不是 Flutter 性能问题,而是 写法影响 rebuild 范围

  • Flutter 最大的思想:UI = 函数(state)


2. StatelessWidget — 无状态组件

✅ 定义

UI 仅由 外部传入的数据 决定,自身不保存状态。

特点

特性说明
无内部状态没有 setState
可 const直接复用,减少 rebuild
更轻量构建快,生命周期简单

生命周期

build()

什么时候用?

  • 页面展示 UI,不需要在本组件内改变状态

  • 数据变化靠 父组件传参 或 状态管理(Riverpod / Provider / Bloc)

示例

class UserAvatar extends StatelessWidget {final String url;const UserAvatar(this.url);@overrideWidget build(BuildContext context) {return Image.network(url);}
}

3. StatefulWidget — 有状态组件

✅ 定义

有一个 State 对象保存状态,需要更新 UI 时调用 setState()

特点

特性说明
自己保存状态用 setState 更新 UI
有生命周期有 init / dispose
用于交互逻辑表单、滚动、动画、输入框控制器等

生命周期(简)

createState()
initState()
didChangeDependencies()
build()   <-- 可以调用很多次
dispose()

示例:计数器

class Counter extends StatefulWidget {@overrideState createState() => _CounterState();
}
class _CounterState extends State {int count = 0;@overrideWidget build(BuildContext context) {return ElevatedButton(onPressed: () => setState(() => count++),child: Text("count = $count"),);}
}

4. 关键对比

对比点StatelessWidgetStatefulWidget
是否保存状态❌ 不保存✅ 保存
UI 是否可更新✅ 外部变化可更新✅ 内部随时更新
生命周期简单拥有完整生命周期
性能与稳定性✅ 更好⚠️ 控制不好会 rebuild 太多
推荐使用场景展示型 UI交互/动画/控制器/表单等

5. 小总结:怎么选?

不要因为会 setState 就全部用 StatefulWidget。

流程图:

是否需要内部保存状态?└── No → StatelessWidget└── Yes → StatefulWidget

进一步细分:

✅ 局部状态 → Stateful
✅ 跨组件状态 → Riverpod / Bloc
✅ UI 仅依赖外部数据 → Stateless (能 const 就 const)


6. 实战:用 Stateless + Riverpod 代替 Stateful

class UserNameText extends ConsumerWidget {@overrideWidget build(BuildContext context, WidgetRef ref) {final name = ref.watch(userProvider);return Text(name);}
}

数据和 UI 解耦:UI 变成 Stateless,状态交给 Riverpod/Bloc。

7. 常见误区与最佳实践

错误说明
✅ 全部用 Stateful太多 setState 会导致不必要的 rebuild
✅ 把 Controller 放 build() 里会不断创建/销毁,导致内存泄漏
✅ 不写 dispose()控制器没释放,会泄漏

最佳实践:

@override
void initState() {super.initState();controller = TextEditingController();
}
@override
void dispose() {controller.dispose();super.dispose();
}

8. 结论

 能 Stateless 不 Stateful
 状态尽量外置(Riverpod / Bloc)
 局部交互才用 setState

http://www.zskr.cn/news/65947.html

相关文章:

  • 2025年靠谱的农村真火壁炉厂家最新用户好评榜
  • React Native 敏捷入门指南
  • 2025年靠谱的医用抽屉滑轨厂家推荐及选购指南
  • 2025年十大高性价比包装设计专业公司排行榜,比较好的包装设
  • Python标准数据类型
  • 喷胶复合机:安全、性能与自动化兼备的厂家推荐
  • 2025年靠谱的SAP专业代理公司推荐排行榜,推荐一下SAP
  • 2025年靠谱的浓缩设备/酶制剂浓缩设备TOP品牌厂家排行榜
  • 2025年11月助听器验配机构推荐:高性价比解决方案评测
  • 读《末日时在做什么?有没有空?可以来拯救吗?》《末日时在做什么?能不能再见一面》有感
  • 2025年中国周易研修班年度排名:未来潜力大的北大周易班
  • 2025年度中国ERP实施商口碑排行榜,优德云ERP实施商客
  • 2025年质量好的长管钢瓶检测设备/无缝钢瓶检测设备厂家最新TOP实力排行
  • 2025年优质的DCMM/DCMM奖励政策实力机构权威排行榜
  • 优秀的电脑维修键盘故障品牌推荐榜?电脑维修键盘故障品牌 电脑维修键盘故障公司 电脑维修键盘故障服务 电脑维修键盘故障上门 电脑维修键盘故障服务商
  • 2025年口碑好的散货船运费行业权威榜
  • 高品质卧式数控机床供应商口碑推荐榜单?卧式数控机床供应商 卧式数控机床销售厂家 卧式数控机床制造商 卧式数控机床加工厂 卧式数控机床优质厂家 卧式数控机床实力厂家
  • 2025年质量好的在线硬度计用户好评厂家排行
  • 靠谱的铝塑门窗厂家排行榜?铝塑门窗公司 铝塑门窗厂家 铝塑门窗工厂 铝塑门窗生产厂家 铝塑门窗供应商 铝塑门窗生产商 铝塑门窗加工厂 铝塑门窗源头厂家 铝塑门窗直销厂家
  • 市面上低温速冻冷库品牌推荐? 低温速冻冷库公司 低温速冻冷库产品 低温速冻冷库供应厂家 低温速冻冷库工厂 低温速冻冷库厂家 低温速冻冷库生产厂家 低温速冻冷库制造商
  • AFOed on 2025/11/29.
  • 2025年11月副业平台推荐榜单:五家高性价比平台助你安全增收
  • 定州市农村自建房口碑推荐排行榜,2026年自建房公司权威测评优选
  • 行业内靠谱的广州到珠海网约车公司推荐排行榜单? 广州到珠海网约车品牌 广州到珠海网约车公司 广州到珠海网约车服务商 广州到珠海网约车渠道
  • 河北保定安国市农村自建房机构权威测评,2026年河北保定安国市地区靠谱自建房公司全维度对比排行榜
  • 2025年工业冷风机智能控制排名TOP6,汽配车间通风降温/汽车制造车间通风降温/敞开式车间通风降温/铁皮车间降温工业冷风机品牌找哪家
  • CMake-HelloWorld
  • 广州专业的中巴包车公司推荐排行榜单?中巴包车品牌 中巴包车公司 中巴包车服务商 中巴包车平台 中巴包车渠道
  • 安国市农村自建房找谁好?2026年靠谱公司TOP6实用选择指南
  • jQuery 入门学习教程,从入门到精通, jQuery选择器详解 —— 全面知识点与实战案例(2) - 实践