You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter 主页面双击返回键退出应用不返回历史页面如何实现?

问题原因

你的原实现中onWillPop返回true时会执行系统默认返回逻辑,即弹出当前路由栈顶页面。如果进入主页面时未清空之前的路由栈,主页面并非路由栈唯一页面,默认返回行为就会依次退回历史页面,不会直接退出应用。

解决方案

方案1:跳转主页面时清空路由栈(推荐)

在从其他页面(如欢迎页、登录页)跳转进入主页面时,使用pushAndRemoveUntil方法清除所有历史路由,让主页面成为路由栈唯一页面,此时原有的双击返回逻辑即可正常触发退出应用。
跳转示例代码:

Navigator.of(context).pushAndRemoveUntil(
  MaterialPageRoute(builder: (context) => const HomePage()),
  (route) => false // 移除所有历史路由
);

方案2:修改返回逻辑主动退出应用(兜底)

主动调用系统退出方法,跳过路由弹栈逻辑,直接关闭应用,无需依赖路由栈状态。
首先引入系统服务依赖:

import 'package:flutter/services.dart';

修改后的WillPopScope逻辑代码:

// 在State类中声明变量存储上次点击时间
DateTime preBackpress = DateTime.now();

@override
Widget build(BuildContext context) {
  return WillPopScope(
    onWillPop: () async {
      final timeGap = DateTime.now().difference(preBackpress);
      final cantExit = timeGap >= const Duration(seconds: 2);
      preBackpress = DateTime.now();
      if(cantExit){
        const snack = SnackBar(
          content: Text('再按一次返回键退出应用'),
          duration: Duration(seconds: 2),
        );
        ScaffoldMessenger.of(context).showSnackBar(snack);
        return false;
      }else{
        // 直接调用系统退出方法
        SystemNavigator.pop();
        return true;
      }
    },
    child: const Scaffold(
      // 主页面原有内容
    ),
  );
}
适配说明

Flutter 3.16及以上版本中WillPopScope已被标记为弃用,推荐使用PopScope组件实现相同逻辑,适配高版本系统返回手势,代码示例:

import 'package:flutter/services.dart';

// 在State类中声明变量存储上次点击时间
DateTime preBackpress = DateTime.now();

@override
Widget build(BuildContext context) {
  return PopScope(
    canPop: false,
    onPopInvoked: (didPop) {
      if (didPop) return;
      final timeGap = DateTime.now().difference(preBackpress);
      final cantExit = timeGap >= const Duration(seconds: 2);
      preBackpress = DateTime.now();
      if(cantExit){
        const snack = SnackBar(
          content: Text('再按一次返回键退出应用'),
          duration: Duration(seconds: 2),
        );
        ScaffoldMessenger.of(context).showSnackBar(snack);
      }else{
        SystemNavigator.pop();
      }
    },
    child: const Scaffold(
      // 主页面原有内容
    ),
  );
}

内容的提问来源于stack exchange,提问作者mafortis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:24:01