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

Flutter 中的生命周期

在 Flutter 中,StatefulWidgetStatelessWidget 这两种 Widget 的生命周期不同,主要关注的是 StatefulWidget,因为它涉及到状态的管理和更新。

StatefulWidget 的生命周期:

1. 创建阶段 (Create)
  • createState()
    • 当你创建一个 StatefulWidget 时,createState() 方法会被调用,并返回一个与该 StatefulWidget 关联的 State 对象。这个方法只会被调用一次。
2. 初始化阶段 (Initialize)
  • initState()
    • 这个方法在 Widget 创建并且 State 对象被插入到 Widget 树时调用。它通常用于执行一些初始化操作,比如网络请求、订阅流、设置初始值等。initState() 只会被调用一次。
3. 构建阶段 (Build)
  • build(BuildContext context)
    • 每次 State 对象的状态发生变化时,Flutter 会调用 build() 方法来重新构建 Widget 树。这个方法会在 State 对象的生命周期中多次调用,通常在 setState() 被调用时,或者当父 Widget 发生变化时。
4. 依赖变化 (Dependencies Changed)
  • didChangeDependencies()
    • State 对象的依赖发生变化时(例如,InheritedWidget 的数据发生变化),Flutter 会调用此方法。它会在 initState() 之后、build() 方法之前调用,并且会在 build() 每次重新构建时调用。
5. 更新阶段 (Update)
  • setState()
    • setState() 是更新 State 对象的状态并触发 build() 方法重新执行的方式。当调用 setState() 时,Flutter 会重新渲染 Widget。
6. 销毁阶段 (Dispose)
  • dispose()
    • State 对象不再需要时,dispose() 会被调用。在这个方法中,我们可以释放资源,如取消订阅流、停止动画、清理控制器等。这个方法只会被调用一次。
StatefulWidget 生命周期的总结图:
1. createState() -> 2. initState() -> 3. build() -> 4. didChangeDependencies() (如果依赖变化)|setState() 触发 build()|5. dispose()

StatelessWidget 的生命周期

StatelessWidget 没有 State,因此没有复杂的生命周期管理。它的生命周期主要是:

  1. 构建阶段:当它第一次被插入到树中时,build() 会被调用。
  2. 更新阶段:每次父 Widget 发生变化时,build() 方法也会被调用。

StatelessWidget 生命周期相对简单,因为它不涉及状态的改变。

http://www.lryc.cn/news/536654.html

相关文章:

  • 深度整理总结MySQL——redoLog日志工作原理
  • 备战蓝桥杯 Day1 回顾语言基础
  • 小记大模型本地部署:vllm, lmdeploy, ollama
  • MySQL查看存储过程和存储函数
  • 从零到一:开发并上线一款极简记账本小程序的完整流程
  • 卷积神经网络实战人脸检测与识别
  • 【面试题系列】Java 多线程面试题深度解析
  • 【C语言】左旋字符串(三种实现方式)
  • 数论补充 之 前后缀分解问题
  • IoTDB 集群节点 IP 改变,如何更新集群
  • 【AI系列】从零开始学习大模型GPT (2)- Build a Large Language Model (From Scratch)
  • webshell通信流量分析
  • 数据可视化+SpringBoot+协同过滤推荐算法的美食点餐管理平台
  • DeepSeek 关联 Word 使用教程:解锁办公新效率
  • [极客大挑战 2019]Havefun1
  • 基于Swift实现仿IOS闹钟
  • Threadlocal的实现原理
  • 线程池处理异常
  • RabbitMQ配置SSL证书
  • .NET 9.0 的 Blazor Web App 项目,进度条 <progress> 组件使用注意事项
  • 第J7周:对于ResNeXt-50算法的思考
  • 【第2章:神经网络基础与实现——2.3 多层感知机(MLP)的构建与调优技巧】
  • 【Elasticsearch】keyword分析器
  • 重生之我在异世界学编程之C语言:深入预处理篇(上)目录)
  • MySQL数据库误删恢复_mysql 数据 误删
  • SpringAI集成DeepSeek实战
  • 解决 THC/THC.h: No such file or directory 报错
  • S4D480 S4HANA 基于PDF的表单打印
  • 数组_移除元素
  • Vue2/Vue3分别如何使用Watch