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

PopScope实现双击返回退出APP仅显示空白屏,如何正确实现?

解决PopScope双击返回退出APP显示空白屏的问题

问题原因

你的代码中,当判断需要退出时调用了Navigator.of(context).pop(),但这只是从导航栈中移除当前页面。如果当前是应用的根页面,pop后导航栈为空,就会显示空白屏,而非真正退出应用。

正确实现方案

需要替换导航栈pop的逻辑为退出整个应用,同时适配Android和iOS平台:

修改后的完整代码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart';

class RootScaffold extends StatefulWidget {
  final Widget body;

  const RootScaffold({required this.body, super.key});

  @override
  State<RootScaffold> createState() => _RootScaffoldState();
}

class _RootScaffoldState extends State<RootScaffold> {
  DateTime? lastBackPressTime;

  bool onWillPop() {
    DateTime now = DateTime.now();
    if (lastBackPressTime == null ||
        now.difference(lastBackPressTime!) > const Duration(seconds: 2)) {
      lastBackPressTime = now;
      Fluttertoast.showToast(msg: 'Press back again to exit.');
      return false;
    }
    return true;
  }

  @override
  Widget build(BuildContext context) {
    return PopScope(
      canPop: false,
      onPopInvoked: (bool didPop) async {
        if (didPop) return;

        final shouldPop = onWillPop();
        if (shouldPop && context.mounted) {
          // 退出整个应用,而非仅pop导航栈
          SystemNavigator.pop();
          // 针对iOS平台的额外处理(可选):如果SystemNavigator.pop不生效,可使用下面的代码
          // if (Platform.isIOS) {
          //   exit(0);
          // } else {
          //   SystemNavigator.pop();
          // }
        }
      },
      child: Scaffold(body: widget.body),
    );
  }
}

关键修改点

  • 引入flutter/services.dart包,使用SystemNavigator.pop()方法退出应用,这是Flutter官方推荐的退出方式,会正确清理应用资源。
  • 移除Navigator.of(context).pop(),替换为SystemNavigator.pop(),避免根页面pop后出现空白。
  • 可选:针对iOS平台,若SystemNavigator.pop()不生效(iOS默认无物理返回键,双击退出场景较少),可结合Platform判断使用exit(0),但需注意exit(0)是强制退出,可能不会触发应用生命周期回调。

额外说明

  • canPop: false必须保留,这样才能拦截系统返回事件,交由onPopInvoked处理。
  • 双击时间间隔的逻辑保持不变,确保用户在2秒内双击才会触发退出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:22:03