持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情
生命周期函数的作用
- 初始化数据
- 请求网络
- 监听响应事件
- 管理内存(初始化及释放内存)
Widget 生命周期
StatelessWidget 生命周期
StatelessWidget
可以由父 Widget 直接传入值,调用 build 方法来构建,整个过程非常简单
class HomeContent extends StatelessWidget {
final String message;
//构造函数,接收父组件传来的值
const HomeContent(this.message, {Key? key}) : super(key: key);
// 重新构建 Widget 树
@override
Widget build(BuildContext context) {
return Text(message);
}
}
StatefulWidget 生命周期
StatefulWidget
需要通过 State
来管理其数据,并且还要监控状态的改变决定是否重新 build
整个 Widget
对于无状态组件生命周期只有一次 build
这个过程,也只会渲染一次。有状态组件的生命周期如下图:
-
生命周期图示
-
createState
在
StatefulWidget
的构造函数中,通过执行createState
方法来创建一个维护StatefulWidget
的State
对象 -
initState
当 Widget 第一次插入到 Widget 树时会被调用,通常会在这个方法中执行一些变量的初始赋值,或者与服务器交互获取服务端数据后调用
setState
来设置 State -
didChangeDependencies
这个方法在两种情况下会调用
-
调用
initState
会调用 -
当 State 对象的依赖发生变化时会被调用。典型的场景是当系统语言 Locale 或应用主题改变时,Flutter framework 会通知 widget 调用此回调
-
-
build
这个方法主要是返回需要渲染的 Widget。调用此方法有以下几个不同的场景
- 调用
initState
之后 - 调用
didUpdateWidget
之后 - 调用
setState
之后 - 调用
didChangeDependencies
之后 - 调用了
deactivate
后,然后将State
对象重新插入树中的另一个位置
- 调用
-
setState
手动调用
setState
方法,会根据最新的数据来重新调用build
方法,构建对应的Widgets
-
didUpdateWidget
执行这个方法是在当父 Widget 触发重建(rebuild)时,系统会调用
didUpdateWidget
方法 -
deactivate
当 Widget 从树中被移除时,会调用此回调。在一些场景下,Flutter framework会将 Widget 重新插到树中,如包含这个 Widget 的子树在树的一个位置移动到另一个位置时(可以通过 GlobalKey 来实现)。如果移除后没有重新插入到树中,则紧接着会调用
dispose
方法 -
dispose
当前的 Widget 不再使用时,会调用 dispose 进行销毁,释放组件资源
-
-
代码示例
class HomeContent extends StatefulWidget { HomeContent({Key? key}) : super(key: key) { print("1、组件 构造方法"); } @override State<StatefulWidget> createState() { print("2、createState 方法"); return _HomeContentState(); } } class _HomeContentState extends State<HomeContent> { _HomeContentState() { print("3、状态 构造方法"); } @override initState() { print("4、initState 方法"); super.initState(); } @override Widget build(BuildContext context) { print("5、build方法"); return Container(); } @override void dispose() { print("6、dispose"); super.dispose(); } }
-
log输出