如何在Flutter中使用PopScope实现双击返回键退出功能?
实现双击返回键防误触退出应用
核心实现逻辑
通过记录上次点击返回键的时间戳,判断两次点击间隔是否在2秒内:
- 首次点击:显示提示Toast,更新时间戳
- 2秒内再次点击:执行退出操作
- 超过2秒点击:重置时间戳,重新触发提示逻辑
Java 实现代码
在主Activity(或封装的BaseActivity)中添加以下代码:
// 记录上次点击返回键的时间 private long lastBackPressedTime = 0; // 退出间隔阈值(2000毫秒=2秒) private static final long EXIT_INTERVAL = 2000; @Override public void onBackPressed() { long currentTime = System.currentTimeMillis(); // 判断两次点击间隔是否超过阈值 if (currentTime - lastBackPressedTime > EXIT_INTERVAL) { Toast.makeText(this, "再次点击以退出", Toast.LENGTH_SHORT).show(); lastBackPressedTime = currentTime; } else { // 关闭当前应用所有关联Activity finishAffinity(); // 可选:强制终止进程(非必要场景不推荐) // System.exit(0); } }
Kotlin 实现代码
private var lastBackPressedTime = 0L private val EXIT_INTERVAL = 2000L override fun onBackPressed() { val currentTime = System.currentTimeMillis() if (currentTime - lastBackPressedTime > EXIT_INTERVAL) { Toast.makeText(this, "再次点击以退出", Toast.LENGTH_SHORT).show() lastBackPressedTime = currentTime } else { finishAffinity() // 可选:强制终止进程 // System.exit(0) } }
优化建议
- 代码复用:将此逻辑封装到
BaseActivity中,所有业务Activity继承该基类,避免重复编写代码 - 体验升级:替换默认Toast为自定义样式(如添加图标、调整显示位置),强化提示效果
- 场景适配:如果应用存在多层Fragment栈,可在判断前先处理Fragment的返回逻辑,再执行应用退出判断
内容的提问来源于stack exchange,提问作者VISHNU PRABHAKARAN
相关产品推荐
相关产品推荐

