Lac*_*lan 6 keyboard-events dart flutter
我正在尝试检测抖动中的“Enter”、“Delete”和“Backspace”等按键。我使用 a 的问题RawKeyboardListener是它会将注意力从任何子小部件上移开。
例如
RawKeyboardListener(
focusNode: _focusNode,
onKey: handleKey,
child: TextField()
)
Run Code Online (Sandbox Code Playgroud)
这使得无法同时检测和使用两个按键Textfield。
有没有人有检测按键的替代方法。
谢谢
Jos*_*ica 14
Flutter 有一个键盘服务,可以为 Flutter 提供来自硬件键盘的原始按键事件,您也可以要求该服务为您提供按键事件。
这种方法的好处是它不会阻止现有的 Flutter 焦点节点接收事件,因此您不必手动处理键盘事件传播。
您可以像这样向该服务添加侦听器:
import 'package:flutter/services.dart';
ServicesBinding.instance.keyboard.addHandler(_onKey);
Run Code Online (Sandbox Code Playgroud)
...哪里_onKey是bool Function(KeyEvent). 这是一个事件处理程序示例:
bool _onKey(KeyEvent event) {
final key = event.logicalKey.keyLabel;
if (event is KeyDownEvent) {
print("Key down: $key");
} else if (event is KeyUpEvent) {
print("Key up: $key");
} else if (event is KeyRepeatEvent) {
print("Key repeat: $key");
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
请参阅此处了解更多信息:https://api.flutter.dev/flutter/services/HardwareKeyboard/addHandler.html
请注意,此事件处理程序将始终接收按键事件,即使文本框当前处于焦点状态也是如此。
以下是在小部件中使用此技术的示例:
import 'package:flutter/services.dart';
// ...
class MyApp extends StatefulWidget {
// ...
}
class _MyAppState extends State<MyApp> {
// ...
bool _onKey(KeyEvent event) {
final key = event.logicalKey.keyLabel;
if (event is KeyDownEvent) {
print("Key down: $key");
} else if (event is KeyUpEvent) {
print("Key up: $key");
} else if (event is KeyRepeatEvent) {
print("Key repeat: $key");
}
return false;
}
@override
void initState() {
super.initState();
ServicesBinding.instance.keyboard.addHandler(_onKey);
}
@override
void dispose() {
ServicesBinding.instance.keyboard.removeHandler(_onKey);
super.dispose();
}
@override
Widget build(BuildContext context) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
小智 4
您可以使用 dart_html 中的以下内容:
window.onKeyPress.listen((KeyboardEvent e) {
print(e.charCode.toString() + " " + new String.fromCharCode(e.charCode));
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
619 次 |
| 最近记录: |