升级Flame至1.0.0-rc14后WillPopScope失效,无法检测安卓返回键
原因
- Flutter 2.5.x版本调整了安卓返回键的事件分发优先级,同时Flame 1.0.0-rc10及后续版本默认开启
GameWidget的硬件按键事件消费能力,会拦截返回键事件,导致外层WillPopScope无法收到回调。
解决方法
方案1:继续沿用原有WillPopScope逻辑
给GameWidget添加禁用按键事件消费的配置,让返回键事件可以向上透传给外层的WillPopScope:
GameWidget( game: game, // 新增这行配置,禁用GameWidget对硬件按键事件的消费 shouldHandleKeyEvents: false, // 其余原有配置保持不变 )
配置完成后你现有的WillPopScope代码即可正常运行。
方案2:使用Flame内置的按键监听接口处理(更推荐)
直接在Game类内部处理返回键事件,不需要依赖外层的Flutter组件,逻辑更内聚:
- 给你的Game类混入
KeyboardEventsmixin - 重写
onKeyEvent方法,判断返回键按下后执行对应逻辑
import 'package:flutter/services.dart'; import 'package:flame/flame.dart'; import 'package:flame/input.dart'; class YourGame extends FlameGame with KeyboardEvents { bool endGame = false; bool pauseGame = false; @override KeyEventResult onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) { // 匹配安卓返回键按下事件 if (event is RawKeyDownEvent && event.logicalKey == LogicalKeyboardKey.goBack) { if (!endGame) { pauseGame = !pauseGame; } // 返回handled表示当前事件已被消费 return KeyEventResult.handled; } // 非返回键事件不做拦截,继续传递 return KeyEventResult.ignored; } // 其余原有游戏逻辑保持不变 }
使用这个方案可以直接删掉外层的WillPopScope组件。
内容的提问来源于stack exchange,提问作者PierrickG
相关产品推荐
相关产品推荐

