Как работать с сочетаниями клавиш

Я пишу приложение Flutter и хочу обрабатывать сочетания клавиш, такие как Ctrl+I, в веб-версии приложения.

Небольшой отказ от ответственности: похоже, что API Flutter для ярлыков недавно изменился. Найденная мною онлайн-документация устарела. я используюFlutter 1.19.0-0.0.pre • channel dev.

Я нашел документ Actions API Design, который похож на текущий доступный API. На основе примера в документе я реализовал этот короткий фрагмент:

class MyIntent extends Intent {}

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

Однако он не реагирует на нажатие клавиши Ctrl и не выводит ожидаемое сообщение. При отладке кода я заметил, что экземплярShortcutManager который обрабатывает ключевое событие, содержит не мою комбинацию клавиш, как указано, а девять других комбинаций клавиш.

Кто-нибудь знает, как пользоваться Shortcuts а также Actions API реагировать на сочетания клавиш?

2 ответа

В вашем примере у вас есть правильная идея, но вам не хватает Focusвиджет. Если у виджета нет фокуса, то его предокShortcuts виджет не получит ключевое событие для его обработки.

Посмотрите этот пример Dartpad, чтобы понять, что я имею в виду. Пример добавляет новое "Домашнее задание" при нажатии клавиш "Alt+N".

Вы также можете использовать FocusableActionDetector, который объединяетShortcuts, Actions, и обработка наведения курсора мыши в один виджет.

Я хочу добавить кое-что в ответ выше ( /questions/54578901/kak-rabotat-s-sochetaniyami-klavish/54578913#54578913):

Если вы хотите добавить более одной клавиши в одно сочетание клавиш, ваш код будет таким:

                  shortcuts: <ShortcutActivator, Intent> {
          LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.keyL): MyIntent(),
      },
Другие вопросы по тегам