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

Flutter实现双击返回退出时点击返回键回到Main.dart而非退出应用如何解决

问题原因

你出现这个问题的核心原因有两个:

  • 你从登录页跳转首页时使用的是Navigator.push方法,登录页仍然存在于路由栈中,系统默认的pop返回操作会回到栈内上一个页面(也就是登录页)
  • 你当前onWillPop中第二次点击返回true,代表允许系统执行默认的返回逻辑,自然就会跳回登录页
解决方案

方案1:修改登录跳转逻辑(更推荐)

登录成功跳转到首页时,清空路由栈中登录页的记录,让首页成为路由栈唯一的页面,此时默认返回操作就会直接退出应用。
将登录页中跳转首页的代码替换为:

// 直接替换当前路由,路由栈中仅保留首页
Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => 你的首页类名()));

// 或者更彻底清空所有历史路由,适合有多级登录相关页面的场景
Navigator.pushAndRemoveUntil(
  context,
  MaterialPageRoute(builder: (context) => 你的首页类名()),
  (route) => false, // 清空所有之前的路由
);

该方案不需要修改你现有的首页WillPopScope代码即可生效。

方案2:修改首页返回逻辑(无需调整跳转逻辑)

直接在第二次点击返回时手动调用系统退出方法,不走默认的路由pop逻辑,首先需要导入对应包:

import 'package:flutter/services.dart';
// 如果需要兼容iOS强制退出可额外导入 import 'dart:io';

然后将你首页的onWillPop逻辑修改为:

onWillPop: () async {
  final difference = DateTime.now().difference(timeBackPressed ?? DateTime(2000));
  final isExitWarning = difference >= const Duration(seconds: 2);
  timeBackPressed = DateTime.now();

  if (isExitWarning) {
    const message = "Press Back Again To Exit";
    Fluttertoast.showToast(
        msg: message,
        fontSize: 18,
        backgroundColor: Colors.white,
        textColor: Colors.black.withOpacity(0.95));
    return false;
  } else {
    Fluttertoast.cancel();
    // 安卓直接退出应用
    SystemNavigator.pop();
    // iOS如果需要强制退出可以用下面的代码,注意苹果官方不建议主动退出应用,可能影响审核
    // exit(0);
    return false; // 阻止默认pop逻辑
  }
},

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:54:02