目录StatelessWidgetStatefulWidget方法按执行顺序1.初始化阶段仅执行 1 次奠定基础2.关键提醒此阶段无 UI 渲染initState() 中不能直接用 context 跳转 / 弹框。3.更新重建阶段多次执行动态刷新 UI4.销毁阶段仅执行 1 次释放资源StatefulWidget 生命周期 4 大阶段 总结核心区别总结StatelessWidgetStatelessWidget 没有独立的生命周期方法核心只有「创建 → 构建 → 销毁」三个阶段且全程无状态变化方法执行时机核心作用新手注意构造函数组件创建时接收父组件传递的参数必须 final 修饰不可在内部修改参数否则编译报错build(BuildContext context)首次渲染 / 父组件刷新 / 参数变化时返回 Widget 树是唯一的核心方法不要写耗时操作会阻塞 UI 渲染StatefulWidgetStatefulWidget 的生命周期实际是其 State 类的生命周期包含「创建 → 初始化 → 构建 → 更新 → 销毁」完整流程StatefulWidget 生命周期 4 大阶段方法按执行顺序方法执行时机核心作用新手注意createState()StatefulWidget 初始化时创建对应的 State 实例必须实现组件和 State 一对一绑定initState()State 创建后首次 build 前初始化操作仅执行 1 次①可做初始化数据、监听事件、启动定时器、网络请求注意异步;②不能直接用 context 跳转 / 弹框需用 WidgetsBinding.instance.addPostFrameCallback 延迟③不能调用 setState()首次 build 前无 UI无需刷新didChangeDependencies()initState 后 / 依赖如 InheritedWidget变化时处理依赖变化很少用(仅在依赖全局状态如主题、语言时使用)新手暂时忽略build()首次渲染 / 每次 setState () / 依赖变化 / 父组件刷新构建 UI 树核心方法不做耗时操作会阻塞 UIdidUpdateWidget()父组件重建且传递的参数变化时处理参数更新对比新旧参数oldWidget必须调用 super.didUpdateWidget(oldWidget)做数据同步setState(VoidCallback fn)手动调用标记状态变化触发 build () 刷新①必须在回调内修改状态setState(() { _count; })②不要嵌套调用dispose()组件被移除 / 页面退出时资源释放仅执行 1 次必做①必须调用 super.dispose()放在方法第一行②取消定时器、取消网络请求、移除监听器避免内存泄漏1.初始化阶段仅执行 1 次奠定基础核心方法createState() → initState()执行逻辑:createState()先创建 State 实例组件与 State 绑定的第一步必须重写initState()State 初始化仅 1 次做变量赋值、定时器 / 网络请求初始化是「唯一能执行一次性初始化逻辑的阶段」。关键提醒此阶段无 UI 渲染initState() 中不能直接用 context 跳转 / 弹框。2.关键提醒此阶段无 UI 渲染initState() 中不能直接用 context 跳转 / 弹框。核心方法didChangeDependencies() → build()执行逻辑:didChangeDependencies()监听依赖变化如主题 / Locale/InheritedWidget首次执行在 initState() 后、build() 前仅新手极少用build()核心返回 Widget 树生成初始 UI 并渲染到屏幕。关键提醒此阶段是「首次 UI 渲染」build() 仅写 UI 逻辑避免耗时操作。3.更新重建阶段多次执行动态刷新 UI触发条件3 种场景都会触发 build() 重建 UI调用 setState()自身状态变化最常用didChangeDependencies()依赖变化如全局主题切换didUpdateWidget()父组件重建且参数变化调用后必触发 build()补充Debug 模式下的 reassemble()热重载也会触发 build()但 Release 模式无效。关键提醒此阶段是「动态 UI 的核心」build() 可多次执行仅更新状态相关的 UI。4.销毁阶段仅执行 1 次释放资源核心方法deactivate() → dispose()非必然连续执行执行逻辑deactivate()组件「临时移除」如列表滑动回收、页面切换离树可能复用复用则不走 dispose()dispose()组件「永久销毁」如页面退出、条件渲染移除仅执行 1 次必须释放定时器 / 监听器等资源避免内存泄漏。关键提醒dispose() 是生命周期最后一步资源释放仅在此方法中做deactivate() 不处理资源释放。StatefulWidget 生命周期 4 大阶段 总结初始化阶段createState()initState()仅 1 次做一次性初始化首次构建阶段didChangeDependencies()build()仅 1 次生成初始 UI更新重建阶段setState()/didChangeDependencies()/didUpdateWidget() 触发 build()多次执行销毁阶段deactivate()临时移除→ dispose()永久销毁仅 1 次释放资源。速记口诀「一次初始化一次首构建多次更重建一次终销毁」核心记住initState() 和 dispose() 仅执行 1 次build() 可多次执行资源释放只在 dispose()核心区别总结维度StatelessWidgetStatefulWidget状态管理无状态参数 final 不可变有 State 类管理可变状态生命周期方法仅 build ()initState、build、dispose 等完整方法刷新触发只能靠父组件 setState自身可调用 setState 刷新也可靠父组件资源管理无销毁方法自动释放需在 dispose () 手动释放资源定时器 / 监听器使用场景静态 UI文本、图标、固定布局动态 UI计数器、表单、列表刷新、网络请求结果展示执行次数build() 可多次执行父组件触发initState()/dispose() 仅 1 次build() 可多次