按下 Command+W 时关闭窗口

问题描述 投票:0回答:2

我没有看到 macOS 上的默认应用程序模板中实现了这一点。当我按下 Command+W 时,它什么也没做。我们如何在 flutter 中做到这一点?

flutter
2个回答
2
投票

注意:在Mac上退出窗口需要按command+Q,这种方法是如果你想专门检测command+W。

要退出 Flutter 应用(不适用于 IOS),您可以调用:

 SystemNavigator.pop();

如果你在内部查看它的代码,会调用:

SystemChannels.platform.invokeMethod<void>('SystemNavigator.pop'

因此,要检测 Command+W,您可以设置键盘侦听器:

 RawKeyboard.instance.addListener((key) {
      if (key.isMetaPressed && key.isKeyPressed(LogicalKeyboardKey.keyW)) {
        SystemNavigator.pop();
      }
    });

完整代码:

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

void main() {
  runApp(MaterialApp(home: const MyApp()));
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    RawKeyboard.instance.addListener((key) {
      if (key.isMetaPressed && key.isKeyPressed(LogicalKeyboardKey.keyW)) {
        SystemNavigator.pop();
      }
    });

    return Scaffold(
      body: Text("Press on the command+w key to close the app"),
    );
  }
}

0
投票

RawKeyboard 已被弃用,现在您需要使用 HardwareKeyboard,第二个 if 检查按键是否一直按下:

关闭

HardwareKeyboard.instance.addHandler(
  (KeyEvent event) {
    if (event is KeyDownEvent) {
      if (HardwareKeyboard.instance.isMetaPressed &&
          HardwareKeyboard.instance
              .isLogicalKeyPressed(LogicalKeyboardKey.keyW)) {
        SystemNavigator.pop();
        return true;
      }
    }

    return false;
  },
);

但这会关闭应用程序,Flutter 没有原生的最小化方法。所以你需要使用像window_manager这样的依赖项。 首先,您需要将此行添加到 main 中:

 await windowManager.ensureInitialized();

一种最小化的方法,但会放在停靠栏

HardwareKeyboard.instance.addHandler(
  (event) {
    if (event is KeyDownEvent) {
      if (HardwareKeyboard.instance.isMetaPressed &&
          HardwareKeyboard.instance
              .isLogicalKeyPressed(LogicalKeyboardKey.keyW)) {
        windowManager.hide();
        return true;
      }
    }
    return false;
  },
);

不一样,但是你可以使用cmd+H,像其他应用程序一样隐藏

© www.soinside.com 2019 - 2024. All rights reserved.