如何使用flutter检测iPhone键盘上按下的键



我正在尝试检测iPhone键盘上是否按下了退格键。我写的逻辑在安卓系统上运行得很好,但在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回调不会被调用。

我该如何处理?

根据flutter api,LogicalKeyboardKeys(如您在代码中使用的键(在iOS上不受支持。点击此处了解更多信息。

您可以使用该地图";翻译";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来测试它是否有效,但我希望这能给你一个正确的方向。

最新更新