Flutter中WillPopScope弃用迁移至PopScope的代码改造咨询
迁移WillPopScope到PopScope的解决方案
针对你需要根据条件控制是否返回页面的场景,直接替换为PopScope即可,核心是通过onPopInvoked回调处理逻辑,并手动控制页面是否弹出,具体代码如下:
PopScope( // 禁止系统默认返回行为,由自定义逻辑控制 canPop: false, onPopInvoked: (bool didPop) async { // 若页面已完成弹出,直接返回 if (didPop) return; if (_actionIcon.icon == Icons.search) { // 条件满足,手动触发页面弹出 if (context.mounted) { Navigator.pop(context); } } else { // 条件不满足,执行状态更新逻辑,不弹出页面 setState(() { _actionIcon = const Icon( Icons.search, color: Colors.white, ); _appBarTitle = const Text('Heading'); _managePayrollBloc.add(_getSearch("")); }); } }, child: SomeChild(), )
关键说明:
canPop: false:告知Flutter不要自动处理返回动作,完全由onPopInvoked回调接管控制。onPopInvoked:用户触发返回操作时触发该回调,参数didPop表示系统是否已完成页面弹出(因设置了canPop: false,初始didPop为false)。- 需返回页面时,通过
Navigator.pop(context)手动完成弹出;无需返回时,执行原有状态更新逻辑即可。
内容的提问来源于stack exchange,提问作者Aizan Sagheer
相关产品推荐
相关产品推荐

