【发布时间】:2021-11-05 20:38:47
【问题描述】:
我目前正在开发适用于 Windows 的 Flutter 应用程序,我尝试检测键盘输入(如空格、箭头、回车...)。
为此,我在我的小部件中使用RawKeyboardListener:
class _WaveformWidgetState extends State<WaveformWidget>
{
FocusNode _focusNode = FocusNode();
@override
Widget build(BuildContext context)
{
return RawKeyboardListener(
autofocus: true,
focusNode: _focusNode,
onKey: (event) {
if (event.isKeyPressed(LogicalKeyboardKey.enter))
{
print("value : enter");
}
},
child: Container(...),
);
}
}
问题是:那个小部件在另一个小部件里面,它包含一个表单,有多个TextFormFields,按钮等等。
因此,TextFormFields 似乎以某种方式保持焦点并阻止我的RawKeyboardListener 工作。
所以我尝试在该小部件的build() 方法中添加FocusScope.of(context).requestFocus(_focusNode);,但现在我的TextFormFields 在单击它们时总是失去焦点。很确定这是一个与焦点相关的问题,但我不知道如何处理。
那么,如何才能在不影响表单的情况下正确收听当前小部件中的原始键盘事件?
谢谢。
【问题讨论】: