拦截(消费)关键事件

jon*_*jon 0 flutter

我可以通过将 a 包装在a 中并使用该函数来成功检测用户何时按下a 中ENTER的键。但是,我想阻止接收击键并添加新行。如何防止击键被传递到?TextFieldTextFieldRawKeyboardListeneronKeyTextFieldENTERENTERTextField

Hoo*_*man 5

使用焦点节点:

final focusNode = FocusNode(onKey: (node, event) {
  if (event.isKeyPressed(LogicalKeyboardKey.enter)) {
    return KeyEventResult.handled;
  }
  return KeyEventResult.ignored;
});
Run Code Online (Sandbox Code Playgroud)

然后将 focusNode 传递给您的 TextField

FocusManager 接收来自 RawKeyboard 和 HardwareKeyboard 的按键事件,并将它们传递给焦点节点。它从具有主要焦点的节点开始,并将调用该节点的 onKey 或 onKeyEvent 回调。如果回调返回KeyEventResult.ignored,表明它没有处理该事件,FocusManager将移动到该节点的父节点并调用其onKey或onKeyEvent。如果 onKey 或 onKeyEvent 返回 KeyEventResult.handled,那么它将停止传播事件。如果到达根 FocusScopeNode FocusManager.rootScope,则该事件将被丢弃。