Flutter - 主动检查是否按下了特殊键(如 ctrl)

Meo*_*012 10 keystroke ctrl dart flutter

问题:如何主动检查是否按下了某个(装饰)键,例如CTRLSHIFT,例如:

if (SomeKeyboardRelatedService.isControlPressed()) {...}
Run Code Online (Sandbox Code Playgroud)

背景

我想检查当用户单击鼠标时是否按下了某个(装饰)键。我们无法主动去做。相反,我们正在使用RawKeyboardListener并记住isControlPressedinonKey事件。这样,稍后GestureDetector.onTap我们就可以检查是否isControlPressedtrue。问题是:

  1. 我们自己维护按键状态似乎是不合理的,因为它违反了单一事实来源原则,并且可能会导致不一致。
  2. 如果用户在按住特殊键的同时离开应用程序,实际上会导致不一致。

我们阅读了相关文档,并用几个关键词进行了搜索,但最终没有结果。

小智 15

RawKeyboard可能就是您正在寻找的。例子:

RawKeyboard.instance.keysPressed.contains(LogicalKeyboardKey.controlLeft)
Run Code Online (Sandbox Code Playgroud)

请注意,在检查控制键等时,您需要检查所有可能的按键变体。

final shiftKeys = [LogicalKeyboardKey.shiftLeft, LogicalKeyboardKey.shiftRight];
final isShiftPressed = RawKeyboard.instance.keysPressed
    .where((it) => shiftKeys.contains(it))
    .isNotEmpty;
Run Code Online (Sandbox Code Playgroud)