方法名 | 功能 | 调用时机 | 调用次数 |
---|---|---|---|
构造方法 | 接收父Widget传递的初始化UI配置数据 | 创建State时 | 1 |
initState | 与渲染相关的初始化工作 | 在State被插入视图树时 | 1 |
didChangeDependencies | 处理State队形依赖关系变化 | initState后及State对象依赖关系变化时 | >= 1 |
build | 构建视图 | State准备好数据需要渲染时 | >= 1 |
setState | 触发视图重建 | 需要刷新UI时 | >= 1 |
didUpdateWidget | 处理Widget的配置变化 | 父Widget setState触发子Widget重建时 | >= 1 |
deactivate | 组件被移除 | 组件不可视 | >= 1 |
dispose | 组件被销毁 | 组件被永久移除 | 1 |
activity生命周期和Flutter对应关系:
在原生 Android、iOS 开发中,有时需要在对应的 App 生命周期事件中做相应处理,比如 App 从后台进入前台、从前台退到后台,或是在 UI 绘制完成后做一些处理。
在原生开发中,可以通过重写 Activity、ViewController 生命周期回调方法,或是注册应用程序的相关通知,来监听 App 的生命周期并做相应的处理。而在 Flutter 中,我们可以利用 WidgetsBindingObserver 类,来实现同样的需求。
Flutter提供了WidgetsBindingObserver来监听AppLifecycleState, 而AppLifecycleState常用的状态有:
resumed 界面可见, 同安卓的onResume。
inactive界面退到后台或弹出对话框情况下, 同安卓的onPause;
paused应用挂起,比如退到后台,同安卓的onStop;
class TestState extends State with WidgetsBindingObserver {
...
@override
@mustCallSuper
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this); // 注册监听器
}
@override
@mustCallSuper
void dispose() {
super.dispose();
WidgetsBinding.instance.removeObserver(this); // 移除监听器
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
print("$state");
if (state == AppLifecycleState.resumed) {
// do sth
}
}
}