Flutter按键事件返回bool与要求的KeyEventResult类型不匹配如何解决
解决方案
报错根因
你当前使用的是Flutter 3.10及以上版本的官方新键盘事件体系,原有的键盘事件回调返回bool值的规范已被废弃,新API要求回调必须返回KeyEventResult枚举类型值,三个可选值含义如下:
KeyEventResult.handled:当前组件已完成该按键事件的处理,事件不会继续向上层父组件传递KeyEventResult.ignored:当前组件不处理该按键事件,事件继续向上传递给其他组件处理KeyEventResult.skipRemainingHandlers:直接跳过所有剩余的同层级事件处理器,终止事件分发
代码修改方案
把你原有代码中的return true替换为return KeyEventResult.handled,return false替换为return KeyEventResult.ignored即可,修改后代码如下:
if (event is RawKeyDownEvent && (event.logicalKey == LogicalKeyboardKey.space || event.logicalKey == LogicalKeyboardKey.enter || event.logicalKey == LogicalKeyboardKey.numpadEnter)) { widget.onPressed(); return KeyEventResult.handled; } else { return KeyEventResult.ignored; }
如果你的业务场景需要完全拦截该事件,不允许任何后续处理器接收,可以把KeyEventResult.handled替换为KeyEventResult.skipRemainingHandlers,普通业务场景使用KeyEventResult.handled即可满足需求。
内容的提问来源于stack exchange,提问作者Henry Mempin
相关产品推荐
相关产品推荐

