Flutter点击两次返回键退出APP
在APP中一些页面为了防止用户操作失误点击到返回键导致退出APP,可以设置其一定时间内点击两次返回键才允许退出APP,完成这个功能可以通过WillPopScope和SystemNavigator.pop实现
我们先来看一下效果:

要实现这个效果我们需要先在外层包裹WillPopScope用来监听用户点击返回键
Widget build(BuildContext context) {
return WillPopScope(
child: Scaffold(
body: Center(
child: Text('点击两次返回退出APP'),
),
),
onWillPop: (){
// 点击返回键的操作
},
);
}
包裹好WillPopScope之后你会发现你再点击返回键就没效果了
然后我们需要先做好一个时间的判断,比如两次点击在两秒之内(可以通过difference对比两个时间的时间差)即可进行退出操作
DateTime lastPopTime; @override
Widget build(BuildContext context) {
return WillPopScope(
child: Scaffold(
body: Center(
child: Text('点击两次返回退出APP'),
),
),
onWillPop: (){
// 点击返回键的操作
if(lastPopTime == null || DateTime.now().difference(lastPopTime) > Duration(seconds: 2)){
lastPopTime = DateTime.now();
Toast.toast(context,msg: '再按一次退出');
}else{
lastPopTime = DateTime.now();
// 退出app
}
},
);
}
最后我们再通过执行SystemNavigator.pop完成退出,需引用
import 'package:flutter/services.dart';
最终代码
DateTime lastPopTime; @override
Widget build(BuildContext context) {
return WillPopScope(
child: Scaffold(
appBar: AppBar(
title: Text('点击两次返回退出APP',style: TextStyle(color: Colors.white,fontSize: 20),),
),
body: Center(
child: Text('点击两次返回退出APP'),
),
),
onWillPop: () async{
// 点击返回键的操作
if(lastPopTime == null || DateTime.now().difference(lastPopTime) > Duration(seconds: 2)){
lastPopTime = DateTime.now();
Toast.toast(context,msg: '再按一次退出');
}else{
lastPopTime = DateTime.now();
// 退出app
await SystemChannels.platform.invokeMethod('SystemNavigator.pop');
}
},
);
}
到这就可以实现啦~
Toast.toast();这个提示框是自己封装的一个小组件,需要用到的可以看https://www.cnblogs.com/gxsyj/p/11018117.html
Flutter点击两次返回键退出APP的更多相关文章
- Android开发之点击两次Back键退出App
Back按键的方法是onKeyDown()方法,重写该方法就可以改变back按键的作用. 实现点击两次Back按键退出app,有两种方法: 方法1. private static boolean is ...
- 【转】Android实现点击两次返回键退出
在做安卓应用是我们经常要判断用户对返回键的操作,一般为了防止误操作都是在用户连续按下两次返回键的时候提示用户是否退出应用程序. 第一种实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获 ...
- android连续点击两次返回键退出代码
private long exitTime = 0; @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCo ...
- 通过广播关闭应用程序(每个Activity)和连续点击两次返回键关闭应用程序
对于一个应用程序可能有很多个Activity,可能每个人并不想一个个的去关闭Activity,也有可能忘了,那怎么关闭所有的未关闭的Activity呢,其实有很多方法,但是我最喜欢的一种就是通过广播事 ...
- Unity3D-实现连续点击两次返回键退出游戏(安卓/IOS)
Unity3D-连续点击两次返回键退出游戏 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Count ...
- Android 应用按两下返回键退出应用程序
在android应用开发中,有时候应用会用到按两下返回键退出应用的功能,今天介绍一下这个功能,直接上代码: @Override public boolean dispatchKeyEvent(KeyE ...
- Android Studio 点击两次返回键,退出APP
该功能的实现没有特别复杂,主要在onKeyDown()事件中实现,直接上代码,如下: //第一次点击事件发生的时间 private long mExitTime; /** * 点击两次返回退出app ...
- MUI 按两次返回键退出应用 及 地理位置获取
<span style="font-size:14px;"><span style="font-size:14px;"> mui.plu ...
- android开发:退出程序(对话框、两次返回键退出)
private void exitDialog() { AlertDialog.Builder aa=new AlertDialog.Builder(this); aa.setTitle(" ...
随机推荐
- 异常信息:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed
上周五遇到一个问题,工程本地编译运行正常,打包本地tomcat运行也正常.部署到测试环境报错: 2017-05-05 09:38:11.645 ERROR [HttpPoolClientsUtil.j ...
- ztree在onCheck()方法中防止因触发联动关系导致页面多次渲染而卡死的问题
这几天在项目中遇到了要使用树形选择框, 而且要求比较复杂,具体叙述如下: 首先是有个选择框,左边选择是适用的商品,右边显示已经选择的商品.也就是说,左边每次勾选操作,都要触发一个事件去刷新右边的页面, ...
- C++ unordered_map桶增长规律
无序容器unordered_map存储为一组桶,各元素通过hash函数映射到各个桶中.心血来潮,来看一下桶的增长规律. #include <iostream> #include <s ...
- nohub
nohup command > myout.file 2>&1 & nohup command > /dev/null 2>&1 &
- swoole深入学习 8. 协程 转
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yangyi2083334/article/ ...
- C# UDP发送和接收
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...
- 【转】解决高版本springboot对Velocity不支持
https://blog.csdn.net/sinat_31270499/article/details/82283880 最近在做关于Spring Boot开发的项目,因为项目中要用到Velocit ...
- 2018 CERC 混合博弈
N堆石子 先手最多拿A个 后手最多拿B个 每次都至少要拿一个 谁先取完谁赢 如果A和B相等直接就是一个bash博弈 如果一个石堆的石子数少于min(A,B) 则是个nim游戏 我们先讨论只有N=1且A ...
- Ubuntu死机解决方法汇总
为什么不建议强制关机 如果长按电源按键强制关机,有可能损坏硬件或者丢失数据,甚至导致磁盘坏道! 其实, 大部分时候的死机是假死, 不是真死... 有时候鼠标还能动呢. 还有一个原因: 对于平时忠贞不二 ...
- MySQL内存结构
实际上MySQL内存的组成和Oracle类似,也可以分为SGA(系统全局区)和PGA(程序缓存区). mysql>show variables like "%buffer%" ...