如何处理键盘快捷键

Fox*_*x32 7 dart flutter flutter-shortcuts

我正在编写一个 Flutter 应用程序,并希望在该应用程序的 Web 版本中处理 Ctrl+I 等键盘快捷键。

\n\n

小免责声明:看起来围绕快捷方式的 Flutter API 最近发生了变化。我找到的在线文档已经过时了。我在用着Flutter 1.19.0-0.0.pre \xe2\x80\xa2 channel dev

\n\n

我发现Actions API 设计文档感觉像是当前可用的 API。根据文档中的示例,我实现了这个简短的片段:

\n\n
class MyIntent extends Intent {}\n\nclass MyApp extends StatelessWidget {\n  // This widget is the root of your application.\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: \'Flutter Demo\',\n      theme: ThemeData(\n        primarySwatch: Colors.blue,\n        visualDensity: VisualDensity.adaptivePlatformDensity,\n      ),\n      home: Shortcuts(\n        shortcuts: {\n          LogicalKeySet(LogicalKeyboardKey.control): MyIntent(),\n        },\n        child: Actions(\n          actions: {\n            MyIntent: CallbackAction(onInvoke: (i) {\n              print(\'Hello World!!!\');\n              return null;\n            }),\n          },\n          child: Center(\n            child: Column(\n              children: <Widget>[\n                Text(\n                  \'Hello World\',\n                ),\n              ],\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,它不会对按下控制键做出反应,也不会输出预期的消息。在调试代码时,我注意到ShortcutManager处理按键事件的实例不包含指定的按键组合,而是包含其他九个按键组合。

\n\n

有谁知道如何使用ShortcutsActionsAPI 对键盘快捷键做出反应?

\n

Gre*_*reg 5

在您的示例中,您的想法是正确的,但您缺少的是一个Focus小部件。如果小部件没有焦点,那么它的祖先Shortcuts小部件将不会接收按键事件来处理它。

请参阅此Dartpad 示例以了解我的意思。该示例在按下“Alt+N”键时添加新的“作业”。

您还可以使用FocusableActionDetector,它将ShortcutsActions和鼠标悬停处理合并到一个小部件中。