你是否有这样的业务场景:在A页面执行某任务,离开A页面则暂停任务?
也就是我们需要监听路由和app的生命周期。我针对此封装了一个插件:route_life
使用方法:
1.增加依赖
dependencies:
route_life: ^1.0.0
2.导入route_life.dart
import 'package:route_life/route_life.dart';
3.设置navigatorObservers
RouteLifeObserver routeLifeObserver = RouteLifeObserver();
MaterialApp(
navigatorObservers: [
routeLifeObserver
],
);
4.在需要监听的StatefulWidget的State里with RouteLifeMixin 和 AppLifeMixin
class _GamePageState extends State with RouteLifeMixin,AppLifeMixin{
@override
void initState() {
super.initState();
_playGamePageMusic();
}
@override
void dispose() {
_stopGamePageMusic();
super.dispose();
}
@override
void onRoutePause(Route nextRoute) {
_pauseGamePageMusic();
}
@override
void onRouteResume(Route nextRoute) {
_resumeGamePageMusic();
}
@override
void onAppLifeChanged(bool resume) {
if(!isRouteShowing){
return;
}
if(resume){
_resumeGamePageMusic();
}else{
_pauseGamePageMusic();
}
}
}
重写以前5个方法可以根据需求编写逻辑。
initState:widget初始化
dispose:widget销毁或者当前路由被pop
onRouteResume:上一个路由被pop了,当前路由获得焦点
onRoutePause:当前路由push了一个路由,当前路由失去焦点
onAppLifeChanged(bool resume):app前后台切换,或者flutter所依附的window失去焦点,切到前台resume为true
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)