如何解决未为Flutter Web触发RawKeyDownEvent
我已经在Flutter应用中实现了 RawKeyboardListener ,并且在调试时它可以在Android和Chrome上完美运行。托管Firebase后,它不会捕获任何按键事件。
RawKeyboardListener(
autofocus: true,focusNode: focusNode,onKey: (RawKeyEvent event) {
if (event.runtimeType.toString() == 'RawKeyDownEvent') {
//some action
}
},child: Padding(
padding: const EdgeInsets.fromLTRB(0,10.0,10.0),child: Text(keyedText,style: TextStyle(color: Colors.black,fontSize: 40.0)),),)
我进行了研究,发现可以找到 RawKeyEventDataWeb 。更改了 RawKeyEventDataWeb 而不是 RawKeyDownEvent 的代码,但是问题是 RawKeyEventDataWeb 听了上下键事件,因此键入的任何内容都会出现两次。
我该如何解决?
解决方法
我不知道解决此问题的“正确”方法。但是,这是我认为的解决方法。任何一对“向上”和“向下”键事件都会在200毫秒内触发。因此,我使用此事实来忽略200毫秒左右的任何事件。不是最好的解决方案,但是可行。
RawKeyboardListener(
autofocus: true,focusNode: focusNode,onKey: (RawKeyEvent event) {
int currentKeyPressTime = DateTime.now().millisecondsSinceEpoch;
if (event.runtimeType.toString() == 'RawKeyDownEvent' ||
event.data is RawKeyEventDataWeb &&
currentKeyPressTime > lastKeyPressTime + 200) {
lastKeyPressTime = currentKeyPressTime;
// some action
}
},child: Padding(
padding: const EdgeInsets.fromLTRB(0,10.0,10.0),child: Text(keyedText,style: TextStyle(color: Colors.black,fontSize: 40.0)),),
只记得在某个时候初始化 lastKeyPressTime 。
,使用Flutter-Web(在我的案例中不使用Firebase托管),key.runtimeType在调试模式下与在预编译代码中不同。这就是它的工作方式:
onKey: (key) {
if (key.runtimeType.toString() == 'RawKeyDownEvent' || // debug mode
key.runtimeType.toString() == 'minified:kW') // compiled mode
{ ... }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。