【问题标题】:How can I detect the key pressed on an iPhone keyboard using flutter?如何使用颤振检测 iPhone 键盘上按下的键?
【发布时间】:2022-01-20 10:37:45
【问题描述】:

我正在尝试检测是否在 iPhone 键盘上按下了退格键。我编写的逻辑在 android 上完美运行,但在 iPhone 或 iPhone 模拟器上却不行。

这是我的代码:

Padding(
          padding: const EdgeInsets.all(28.0),
          child: RawKeyboardListener(
            onKey: (RawKeyEvent event) {
            if(event.runtimeType == RawKeyDownEvent){
              if (event.logicalKey == LogicalKeyboardKey.backspace || event.physicalKey == PhysicalKeyboardKey.backspace) {
                _focusNodes[i]?.unfocus();
                if (i != 0) {
                  _focusNodes[i - 1]?.requestFocus();
                }
              }
            }
          },
            focusNode: FocusNode(),
            child: TextField(
               key: Key('PinInput'),
              controller: TextEditingController(),
              focusNode: FocusNode(),
            ),
          ),
        ),

这段代码在 android 中完美运行,但是当我在 iPhone 或 iPhone 模拟器中按下一个键时,RawKeyboardListener 中的 onKey 回调没有被调用。

我该如何处理?

【问题讨论】:

  • 我不太确定您到底在寻找什么。但是如果要检测键盘是否打开可以使用this package
  • @JahnE。我正在尝试检测键盘 IOS 上按下的确切键(退格键)。我想在按下退格键时执行逻辑。

标签: flutter


【解决方案1】:

根据flutter api,您在代码中使用的LogicalKeyboardKeysiOS 不支持。了解更多here

您可以使用地图将 iOS 键代码“翻译”为您预期的 LogicalKeyboardKey。在这张地图中,您会发现 iOS 密钥代码 42 就是您要查找的内容:42: LogicalKeyboardKey.backspace,

要使用常量,import package:flutter/services.dart.

然后像这样访问 if 检查中的顶级常量 kIosToLogicalKey

if (event.logicalKey == LogicalKeyboardKey.backspace ||
    // TODO: Check if iOS key code is 42 or kIosToLogicalKey[42]  ||
    event.physicalKey == PhysicalKeyboardKey.backspace) {

仅供参考:我知道这不是完整的解决方案,但是,我没有 mac 来测试它是否正常工作,但我希望这能给你一个正确的方向来看待和从那里开始。

【讨论】:

    猜你喜欢
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 2018-10-24
    • 2019-05-22
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多