首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Flutter 零基础入门(二十七):Widget 的一生 —— initState、build 与 dispose 全解析

Flutter 零基础入门(二十七):Widget 的一生 —— initState、build 与 dispose 全解析

作者头像
LarryLan
发布2026-01-27 14:32:55
发布2026-01-27 14:32:55
800
举报

Widget 的一生 —— initState、build 与 dispose 全解析

在上一篇中,我们正式迈入了 Flutter 的核心领域:

  • StatefulWidget
  • State
  • setState 刷新界面

你已经知道:

状态变化 → UI 自动更新

但你可能还会有这些疑问:

  • 页面什么时候初始化?
  • build 为什么会被调用很多次?
  • 页面关闭时要不要“清理东西”?

这一篇,我们就来回答这些问题。


一、为什么要了解 Widget 生命周期?

在真实 App 中,你一定会遇到:

  • 页面初始化时请求数据
  • 页面进入时启动动画
  • 页面离开时关闭定时器
  • 页面销毁时释放资源

📌 这些事情,都和 Widget 生命周期 有关。


二、什么是 Widget 的生命周期?

简单理解:

一个 StatefulWidget 从“创建”到“销毁”的完整过程

就像人一样:

  • 出生
  • 成长
  • 工作
  • 离开

三、StatefulWidget 的生命周期核心方法

在零基础阶段,你只需要重点掌握 3 个方法

1️⃣ initState() 2️⃣ build() 3️⃣ dispose()


四、initState:页面的“出生时刻”(非常重要)

1️⃣ initState 是什么时候调用?

  • 只调用一次
  • 在页面第一次 build 之前
  • State 创建完成后立即调用

📌 记住一句话:

initState 只会执行一次


2️⃣ 常见用途

  • 初始化变量
  • 请求接口数据
  • 启动动画
  • 初始化控制器(Controller)

3️⃣ 基本写法

代码语言:javascript
复制
@override
void initState() {
  super.initState();
  print('页面初始化');
}

⚠️ 注意:

一定要先调用 super.initState()


五、build:页面的“渲染过程”

1️⃣ build 是干嘛的?

根据当前状态,构建 UI

代码语言:javascript
复制
@override
Widget build(BuildContext context) {
  return Text('Hello');
}

2️⃣ build 会被调用多少次?

👉 很多次

例如:

  • setState
  • 父组件 rebuild
  • 屏幕尺寸变化

📌 非常重要的一句话:

build 不是初始化方法


3️⃣ build 里不该做的事情 ❌

❌ 请求网络 ❌ 启动定时器 ❌ 创建只需要一次的对象


六、dispose:页面的“告别时刻”

1️⃣ dispose 是什么时候调用?

  • 页面被移除
  • State 即将销毁
  • 只调用一次

2️⃣ 常见用途

  • 关闭定时器
  • 释放动画控制器
  • 关闭 Stream
  • 清理资源

3️⃣ 基本写法

代码语言:javascript
复制
@override
void dispose() {
  print('页面销毁');
  super.dispose();
}

📌 记住:

dispose 是善后工作


七、一个完整生命周期示例

代码语言:javascript
复制
class LifeCycleDemo extends StatefulWidget {
  @override
  _LifeCycleDemoState createState() => _LifeCycleDemoState();
}

class _LifeCycleDemoState extends State<LifeCycleDemo> {
  int count = 0;

  @override
  void initState() {
    super.initState();
    print('initState');
  }

  @override
  Widget build(BuildContext context) {
    print('build');
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            setState(() {
              count++;
            });
          },
          child: Text('点击 $count'),
        ),
      ),
    );
  }

  @override
  void dispose() {
    print('dispose');
    super.dispose();
  }
}

运行后你会看到:

  • initState:只执行一次
  • build:多次执行
  • dispose:页面退出时执行

八、生命周期执行顺序(记住这个)

代码语言:javascript
复制
initState
↓
build
↓
setState → build(多次)
↓
dispose

📌 这是 Flutter 状态组件的核心流程图


九、新手最常见的 5 个坑

❌ 在 build 里请求接口 ❌ 在 initState 里用 context 做复杂操作 ❌ 忘记调用 super ❌ 不释放资源 ❌ 以为 build 只执行一次


十、这一篇你真正学会了什么?

你已经掌握了:

  • StatefulWidget 的生命周期
  • initState 的正确用途
  • build 的真正职责
  • dispose 的重要性

你现在对 Flutter 的理解已经是:

不是“写 UI”,而是“管理状态与生命周期”


十一、总结一句话

initState 初始化 build 渲染界面 dispose 善后清理


🔜 下一篇预告

《Flutter 零基础入门(二十八):列表 ListView —— 最常用的页面结构》

下一篇我们将正式进入:

  • ListView
  • 列表滚动
  • 列表项复用
  • 真实 App 的信息流结构

从下一篇开始:

你写的将不再是“单页面”,而是“真实业务页面” 📱

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Larry的Hub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Widget 的一生 —— initState、build 与 dispose 全解析
    • 一、为什么要了解 Widget 生命周期?
    • 二、什么是 Widget 的生命周期?
    • 三、StatefulWidget 的生命周期核心方法
    • 四、initState:页面的“出生时刻”(非常重要)
      • 1️⃣ initState 是什么时候调用?
      • 2️⃣ 常见用途
      • 3️⃣ 基本写法
    • 五、build:页面的“渲染过程”
      • 1️⃣ build 是干嘛的?
      • 2️⃣ build 会被调用多少次?
      • 3️⃣ build 里不该做的事情 ❌
    • 六、dispose:页面的“告别时刻”
      • 1️⃣ dispose 是什么时候调用?
      • 2️⃣ 常见用途
      • 3️⃣ 基本写法
    • 七、一个完整生命周期示例
    • 八、生命周期执行顺序(记住这个)
    • 九、新手最常见的 5 个坑
    • 十、这一篇你真正学会了什么?
    • 十一、总结一句话
    • 🔜 下一篇预告
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档