小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
📃 需求是学习技术最有效的动力
Flutter生命周期,需求,在app前台打开系统界面,用户操作了权限,回到app前台的时候要及时刷新权限状态。
实现:
实现 WidgetsBindingObserver 类
在initState方法
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addObserver(this);
}
在didChangeAppLifecycleState监听状态 可以监听app在进入前台,离开前台的回调。然后就可以做相应的操作。
void didChangeAppLifecycleState(AppLifecycleState state) {
// TODO: implement didChangeAppLifecycleState
super.didChangeAppLifecycleState(state);
switch (state) {
case AppLifecycleState.inactive:
Utils.logs('inactive');
break;
case AppLifecycleState.resumed:
Utils.logs('resumed');
_provider.initPermissionData();
break;
case AppLifecycleState.paused:
Utils.logs('paused');
break;
case AppLifecycleState.detached:
Utils.logs('detached');
break;
}
}
在dispose记得移除
void dispose() {
// TODO: implement dispose
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
app生命周期执行顺序:
createState:该函数为 StatefulWidget 中创建 State 的方法,当 StatefulWidget 被调用时会立即执行 createState
initState:该函数为 State 初始化调用,可以做一些初始化操作。
didChangeDependencies:该函数是在该组件依赖的 State 发生变化时
build:主要是返回需要渲染的 Widget ,由于 build 会被调用多次,因此在该函数中只能做返回 Widget 相关逻辑,避免因为执行多次导致状态异常。
reassemble:主要是提供开发阶段使用,在 debug 模式下,每次热重载都会调用该函数,因此在 debug 阶段可以在此期间增加一些 debug 代码,来检查代码问题。
didUpdateWidget:该函数主要是在组件重新构建,比如说热重载,父组件发生 build 的情况下,子组件该方法才会被调用,其次该方法调用之后一定会再调用本组件中的 build 方法。
deactivate:在组件被移除节点后会被调用,如果该组件被移除节点,然后未被插入到其他节点时,则会继续调用 dispose 永久移除。
dispose:永久移除组件,并释放组件资源。
记录点滴