Flutter页面周期
StatelessWidget只有createElement、与build两个生命周期 StatefulWidget的生命周期方法按照时期不同可以分为三组:
进入页面会加载:initState、didChangeDependencies、build
初始化时期
createState:
当我们构建一个StatefulWidget时,这个会立即调用,这个方法必须被覆盖
initState:
这是创建widget时调用的除构造方法外的第一个方法: 类似于Android的:onCreate()与iOS的viewDidLoad()在这个方法中通常做一些初始化的工作,比如channel的初始化,监听器的初始化等
更新时期:
didChangeDependencies
当依赖的State对象改变时会调用
- 在第一次构建widget时,在initState()之后立即调用此方法
- 如果的StatefulWidget依赖于InheritedWidget,那么当当前State所依赖InheritedWidget中的变量改变时会再次调用它
拓展:InheritedWidget可以高效的将数据在widget树中向下传递、共享
build
这是一个必须实现的方法,在这里实现你要呈现的页面内容 它会在didChangeDependencies()之后立即调用;另外当调用setState后也会再次调用该方法
didUpdateWidget
这是一个不常用到的生命周期方法,当父组件需要重绘时会调用 该方法会携带一个oldWidget参数,可以将其与当前的widget进行对比以便执行一些额外的逻辑 if (oldWidget.xxx != widget.xxx)
销毁期:
deactivate
很少使用,在组件被移除时调用在dispose之前调用
dispose
常用:组件被销毁时调用 通常在该方法中执行一些资源的释放工作比如,监听器的卸载,channel的销毁等
Flutter应用的周期
如何获取Flutter应用的周期 WidgetsBindingObsever:是一个Widgets绑定观察器,通过它我们可以监听应用的生命周期、语言
class AppLifecyle extends StatefulWidget {
@overirde
_AppLifecycleState createState() => _AppLifecycleState()
}
class _AppLifecycleState extends State<AppLifecycle> with WidgetsBindingObsever {
@overirde
Widget build(BuildContext context){
WidgetBinding.instance.addObsever(this)
}
@overirde
void didChangeSppLifecycleState(AppLifecycleState state<img src="){" alt="" width="100%" />
super.didChangeSppLifecycleState(state)
print("state = $state")
if (state == AppLifecycleState.paused){
print("App进入后台")
}else if (state == AppLifecycleState.resumed){
print("App进入前台")
}else if (state == AppLifecycleState.inactive){
// 不常用:应用程序处于非活动状态,并且未接收用户输入时调用,比如:来了个电话
}else if (state == AppLifecycleState.suspending){
//不常用:应用程序被挂起时调用,它不会在iOS上触发
}
}
@override
void dispose(){
WidgetsBinding.instance.removeObsever(this)
super.dispose()
}
}