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
相关产品推荐
相关产品推荐

