RawKeyDownEvent not triggered for Flutter Web



我在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, 0, 10.0),
child: Text(keyedText,
style: TextStyle(color: Colors.black, fontSize: 40.0)),
),
)

我进行了研究,发现我可以查找RawKeyEventDataWeb。更改了RawKeyEventDataWeb的代码,而不是RawKeyDownEvent,但问题是

RAwKeyEventData_Web如何解决此问题?

我不知道"右";解决这个问题的方法。但我想了一个变通办法。任何一对"Up"one_answers"Down"键事件都会在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, 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
{ ... }

最新更新