当前位置: 首页 > 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.jsqmd.com/news/55825/

相关文章:

  • 开源AI智能名片链动2+1模式S2B2C商城小程序商业化路径优化研究 - 实践
  • 2025年热门的服装激光切割机/全景激光切割机厂家最新推荐排行榜
  • 2025年评价高的香氛护手霜/保湿护手霜优质厂家推荐榜单
  • 2025年热门的双功能阻尼隐藏轨厂家最新TOP排行榜
  • React Native 敏捷入门指南
  • 2025年评价高的三节工业重型滑轨TOP品牌厂家排行榜
  • 2025年宁波刑事辩护律所排名:刑事辩护律所哪个案例多
  • 2025年口碑好的伸铝箔四方袋/PE四方袋TOP品牌厂家排行榜
  • 上海春笋装饰办公室 商铺装修推荐:双场景快装与定制落地成果解析 附大量真实案例集锦
  • 2025包装设计公司TOP5权威推荐:新深度测评指南,甄选企
  • 2025年口碑好的精密丝杆升降机厂家最新TOP实力排行
  • 2025年评价高的圆形防火阀/70防火阀TOP实力厂家推荐榜
  • 2025年热门的微波真空干燥机热门厂家推荐榜单
  • 2025年评价高的减速机厂家最新推荐权威榜
  • 2025年质量好的热泵式衣物烘干机/杀菌消毒衣物烘干机厂家最新热销排行
  • 2025年靠谱的医用抽屉滑轨厂家推荐及选购指南
  • 内网配置深度学习环境
  • 2025年评价高的包边净化铝型材/超薄净化铝型材厂家最新热销排行
  • 2025年中国斜流增压管道风机定制推荐厂家与净化离心风机定制
  • 2025年十大高性价比包装设计专业公司排行榜,比较好的包装设
  • 2025年质量好的精密型中空旋转平台厂家推荐及采购参考
  • 2025年评价高的304过滤网板最新TOP品牌厂家排行
  • Python标准数据类型
  • 比较好的复合钢格板供应商推荐排行榜单?复合钢格板供应商 复合钢格板销售厂家 复合钢格板制造厂 复合钢格板生产商 复合钢格板厂商 复合钢格板企业 复合钢格板供货商
  • 喷胶复合机:安全、性能与自动化兼备的厂家推荐
  • 2025年靠谱的SAP专业代理公司推荐排行榜,推荐一下SAP
  • 2025年靠谱的纳米远红外加热圈/远红外节能加热圈厂家最新实力排行
  • Atcoder Beginner Conntest 434(ABCDE)
  • 2025年比较好的超声波探伤机最新TOP厂家排名
  • 市场铝型材供应厂家推荐排行榜?铝型材供应厂家 铝型材工厂 铝型材厂家 铝型材生产厂家 铝型材源头厂家 铝型材供应商