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

WillPopScope已废弃,如何实现退出应用确认弹窗功能?

替代WillPopScope实现退出应用确认弹窗的方案

Flutter 3.12版本后WillPopScope已被废弃,官方推荐使用PopScope组件来替代,以下是适配后的实现代码:

PopScope(
  // 禁用默认返回行为,交由自定义逻辑处理
  canPop: false,
  onPopInvoked: (bool didPop) async {
    // 如果已经完成弹出动作,直接返回
    if (didPop) return;

    final shouldExit = await showDialog(
      context: context,
      builder: (context) => CupertinoAlertDialog(
        title: const Text('Exit App'),
        content: const Text('Are you sure you want to exit the app?'),
        actions: [
          CupertinoDialogAction(
            onPressed: () => Navigator.pop(context, false),
            child: const Text('Dismiss'),
          ),
          TextButton(
            onPressed: () => Navigator.pop(context, true),
            child: Text(
              'Exit',
              style: TextStyle(color: Theme.of(context).colorScheme.error),
            ),
          ),
        ],
      ),
    );

    // 用户确认退出时,手动执行弹出操作
    if (shouldExit == true && context.mounted) {
      Navigator.pop(context);
    }
  },
  child: // 这里放置你的页面主体内容
)

关键说明

  • canPop: false:关闭组件默认的返回响应,确保返回事件完全由我们的自定义逻辑处理
  • onPopInvoked回调:用户触发返回操作(安卓物理返回键、iOS侧滑返回等)时触发,didPop参数用于判断是否已经完成了弹出动作,避免重复处理
  • 弹窗逻辑与原代码保持一致,仅在用户确认退出时手动调用Navigator.pop(context)完成页面弹出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:18:24