@override
void initState() {
window.onKeyData = (final keyData) {
if (keyData.logical == LogicalKeyboardKey.escape.keyId) {
widget.onPressed();
return true;
}
/// Let event pass to other focuses if it is not the key we looking for
return false;
};
super.initState();
}
@override
void dispose() {
window.onKeyData = null;
super.dispose();
}
3条答案
按热度按时间lf5gs5x21#
您可以使用dart_html中的以下内容:
bksxznpy2#
您可以在有状态小部件的
initState
中使用dart:ui
并设置window.onKeyData
方法使用该方法时要小心,因为如果屏幕上有任何可聚焦的节点,您也需要向它们传递事件,否则,例如,TextField将无法工作。
dw1jzc5e3#
Flutter有一个键盘服务,它为Flutter提供原始按键事件,您也可以要求该服务为您提供按键事件。
这种方法的好处是它不会阻止现有Flutter焦点节点接收事件,因此您不必手动处理键盘事件传播。
您可以向此服务添加侦听器,如下所示:
...其中
_onKey
是bool Function(KeyEvent)
。下面是一个事件处理程序示例:更多信息,请访问:https://api.flutter.dev/flutter/services/HardwareKeyboard/addHandler.html
请注意,即使文本框当前处于焦点位置,此事件处理程序也将始终接收按键事件。
以下是在小部件中使用此技术的示例: