【问题标题】:How to capture the Mac OS hotkey events, such as cmd+tab, etc,如何捕获 Mac OS 热键事件,如 cmd+tab 等,
【发布时间】:2021-09-21 00:20:03
【问题描述】:

我正在开发一个 Flutter 原型应用程序,我有一个用例,我应该能够捕获所有操作系统热键事件并防止默认行为。

我应该能够阻止应用在CMD+Q 上关闭。

任何帮助将不胜感激,在此先感谢。

更新:

我使用 RawKeyboardLintener 观察键盘事件,它在应用程序处于焦点时捕获事件,但在 cmd+tabcmd+q 上,操作系统接管并且应用程序失去焦点或关闭。

我没有找到任何材料来捕捉它或阻止它发生。

代码块

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: new Text(widget.title),
      ),
      body: RawKeyboardListener(
        focusNode: FocusNode(),
        onKey: (RawKeyEvent event) {
          if (event.runtimeType.toString() == 'RawKeyDownEvent') print(event);
        },
        autofocus: true,
        child: new Container(
          child: Text("hello"),
        ),
      ),
    );
  }
}

【问题讨论】:

    标签: flutter flutter-desktop


    【解决方案1】:

    Flutter 无法处理从未到达 Flutter 视图的事件。如果您想处理操作系统使用不同传递路径的事件,您需要在本机代码中执行(与在非 Flutter macOS 应用程序中执行的方式相同)。

    【讨论】:

      猜你喜欢
      • 2011-09-19
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多