You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter macOS应用中实现Command+W快捷键关闭窗口?

在Flutter macOS应用中实现Command+W关闭窗口功能

Flutter默认的macOS应用模板没有处理Command+W这个系统级快捷键,你可以通过以下两种方法实现:

方法一:修改macOS原生代码(推荐,贴合系统行为)

打开项目中的macos/Runner/AppDelegate.swift文件,在AppDelegate类中添加快捷键处理逻辑:

import Cocoa
import FlutterMacOS

@NSApplicationMain
class AppDelegate: FlutterAppDelegate {
  // 设置最后一个窗口关闭时退出应用(可选,根据需求调整)
  override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
    return true
  }

  // 拦截并处理Command+W快捷键
  override func performKeyEquivalent(with event: NSEvent) -> Bool {
    if event.modifierFlags.contains(.command) && event.charactersIgnoringModifiers == "w" {
      NSApp.keyWindow?.close()
      return true // 标记事件已处理,不再传递
    }
    return super.performKeyEquivalent(with: event)
  }
}

修改完成后,重新运行macOS应用即可生效。

方法二:Flutter层通过快捷键绑定实现

在Flutter代码中使用Shortcuts和Actions组件绑定快捷键,调用窗口关闭API:

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

void main() {
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Shortcuts(
        shortcuts: {
          LogicalKeySet(LogicalKeyboardKey.meta, LogicalKeyboardKey.keyW): const Intent('CloseWindow'),
        },
        child: Actions(
          actions: {
            Intent('CloseWindow'): CallbackAction<Intent>(
              onInvoke: (intent) {
                WidgetsBinding.instance.window.close();
                return null;
              },
            ),
          },
          child: const Scaffold(
            appBar: AppBar(title: Text('Flutter macOS App')),
            body: Center(child: Text('Press Command+W to close window')),
          ),
        ),
      ),
    );
  }
}

这种方式无需修改原生代码,适合跨平台场景,但需要注意多窗口场景下的窗口管理逻辑。


内容的提问来源于stack exchange,提问作者Hammerhead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:45:31