flutter 安卓通过返回键退出app拦截或操作

安卓通过返回按钮退出app,进行拦截.

为什么要进行拦截呢? 因为我们遇到了一个bug,音乐播放器在从下往上推的时候,会释放掉,不会继续播放,但是通过底部返回按键退出的情况下,音乐播放器并没有被释放掉,所以要进行一下拦截,手动把音乐播放器释放掉.

出现这种情况,盲猜一下哈,不对的话请懂的大佬留言说一下.
我猜flutter里 安卓的退出有两种情况

  • 一种是底部向上推动,然后关闭应用,这种情况下,可能走的是杀死整个app的进程exit(0),应该是这个方法.
  • 第二种就是返回按键的退出,到根目录的时候,再次按的时候,可能就要退出了,执行了SystemNavigator.pop();,应该是这个方法吧??? 这个我不确定,我觉得可能是通知安卓原生那面进行退出,然后安卓那面并没有把我的音乐播放器释放.很无奈.所值能进行拦截.

解决:

通过WillPopScope进行拦截

在你需要拦截的地方做操作,像我们的项目就是在tabbar的里进行拦击,因为到了根目录!
如果你的登录注册不是在tabbar里,在那里也想拦截,那么你需要在你的登陆里也要写.

上代码:

在方法外定义一个时间
DateTime? popTime;

实现

在build里写:
 WillPopScope(
        onWillPop: () async {
          if (popTime == null ||
              DateTime.now().difference(popTime!) > Duration(seconds: 1)) {
            popTime = DateTime.now();
            //进行拦截,给个提示,如果再次按的话,执行下面的操作;
            XXToast.toast(msg: 'Press exit one more time'.tr);
            return Future.value(false);
          } else {
            popTime = DateTime.now();
            //手动释放音乐播放器
            AudioPlayerUtil.dispose();
            // 退出app
            return Future.value(true);
          }
        },

如果只想拦截,并不想给提示,那么不用写定义时间,直接写拦截,给false就是不执行,给true就是执行

WillPopScope(
   onWillPop: () => Future.value(false),
)

到此结束,如有有懂的大佬,希望在留言下给于评论,讲解一下安卓的返回机制.十分感谢~~~!

你可能感兴趣的:(flutter 安卓通过返回键退出app拦截或操作)