美文网首页
flutter 安卓通过返回键退出app拦截或操作

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

作者: 司徒新新 | 来源:发表于2022-09-24 15:00 被阅读0次

    安卓通过返回按钮退出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拦截或操作

          本文链接:https://www.haomeiwen.com/subject/fdooortx.html