Flutter如何在Widget中监听route和app的生命周期

Flutter如何在Widget中监听route和app的生命周期,第1张

你是否有这样的业务场景:在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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993312.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存