当前位置:网站首页>Flutter的生命周期
Flutter的生命周期
2022-08-10 05:35:00 【丶咸鱼】
Flutter的生命周期分为两部分
- widget的生命周期
- App的生命周期
widget的生命周期
StatelessWidget
无状态组件的生命周期只有build,build在每次刷新界面的时候都会被调用,所以最好不要执行太多业务逻辑。
StatefulWidget
- createState:是StatefulWidget中创建State的方法,当StatefulWidget被调用时会立即执行createState,且执行一次(相当于android中的onCreate)
- initState:该函数为 State 初始化调用,因此可以在此期间执行 State 各变量的初始赋值,同时也可以在此期间与服务端交互,获取服务端数据后调用 setState 来设置 State。此时View并没有渲染,只是StatefluWidget已经被加载到渲染数中,此时mount的值会变成ture,直到dispose调用的时候才会变为false
- didChangeDependencies:在StatefulWidget第一次创建的时候,此方法会在initState方法之后立即调用,之后当statefulWidget刷新的时候,不会在调用,除非statefulWidget依赖InherWidget发生变化之后才会调用,因此didChangeDependencies可能会被调用多次。
- build:在StatefulWidget第一次创建的时候,build会在didChangeDependencies方法之后立即调用,或者当UI需要重新渲染的时候(setState触发),build会被调用。在该函数中只能做返回Widget相关逻辑,避免因为执行多次导致状态异常。
- addPostFrameCallback:是StatefulWidget渲染结束的回调,只会被调用一次,之后StatefulWidget需要刷新UI也不会调用,此方法的使用时在initState里添加回调。
- didUpdateWidget:当组件状态改变的时候就会调用didUpdateWidget,可能会调用多次(setState的时候并不调用,改变代码hot reload时候会调用didUpdateWidget并执行build)
- deactivate(组件移除时):当要将state对象从渲染树中移除的时候,就会调用deactivate生命周期,这标志着StatefulWidget将要销毁,但是有时候State不会被销毁,而是重新插入到渲染树中。
- dispose(组件移除):当view不需要再显示,在渲染树中移除的时候,State就会永久的从渲染树中移除,就会调用该生命周期,此时做一些取消监听,动画的操作
App生命周期
- resumed
- inactive
- paused
- suspending
可以使用WidgetBindingObserver监听App的生命周期
class TestState extends State<TestStatefulWidget> with WidgetsBindingObserver {
@override
void initState(){
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
super.dispose();
WidgetsBinding.instance.removeObserver(this);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
switch (state) {
case AppLifecycleState.paused:
break;
case AppLifecycleState.resumed:
break;
case AppLifecycleState.inactive:
break;
case AppLifecycleState.detached:
break;
}
}
}
边栏推荐
猜你喜欢
随机推荐
Collection工具类
STM32F407ZG PWM
cesium listens to map zoom or zoom to control whether the content added on the map is displayed
Radon 变换原理和应用
详解 Hough 变换(上)基本原理与直线检测
LeetCode Interview Question 17.14 Minimum k Number (Moderate)
pytorch-09.多分类问题
LeetCode 剑指offer 21.调整数组顺序使奇数位于偶数前面(简单)
Common class String overview
LeetCode 1720.解码异或后的数组(简单)
21天挑战杯MySQL——Day06
LeetCode 100.相同的树(简单)
【简易笔记】PyTorch官方教程简易笔记 EP4
程序员副业赚钱之道,实现月收入增加20K
Explain the principle of MySql index in detail
51单片机RS485远程双机多机温度采集主从机多节点蜂鸣器报警
[Notes] Collection Framework System Collection
String常用方法
集合 Map
细说MySql索引原理