在 Flutter 桌面开发中隐藏 macOS 窗口控制按钮
要在 Flutter 桌面应用中隐藏 macOS 窗口的默认关闭、最大化和最小化按钮,你可以使用 window_manager
插件或直接修改 macOS 原生代码。以下是两种方法:
方法一:使用 window_manager 插件
- 首先添加
window_manager
依赖到你的pubspec.yaml
:
dependencies:
window_manager: ^0.3.0
- 在 main.dart 中配置窗口:
import 'package:flutter/material.dart';
import 'package:window_manager/window_manager.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 必须加上这一行
await windowManager.ensureInitialized();
// 隐藏窗口控制按钮
WindowOptions windowOptions = const WindowOptions(
titleBarStyle: TitleBarStyle.hidden,
);
windowManager.waitUntilReadyToShow(windowOptions, () async {
await windowManager.show();
await windowManager.focus();
});
runApp(MyApp());
}
方法二:修改 macOS 原生代码
-
打开
macos/Runner/MainFlutterWindow.swift
文件 -
修改
MainFlutterWindow
类:
import Cocoa
import FlutterMacOS
class MainFlutterWindow: NSWindow {
override func awakeFromNib() {
let flutterViewController = FlutterViewController()
let windowFrame = self.frame
self.contentViewController = flutterViewController
self.setFrame(windowFrame, display: true)
// 隐藏标题栏和窗口控制按钮
self.titleVisibility = .hidden
self.titlebarAppearsTransparent = true
self.styleMask.insert(.fullSizeContentView)
// 隐藏所有按钮
self.standardWindowButton(.closeButton)?.isHidden = true
self.standardWindowButton(.miniaturizeButton)?.isHidden = true
self.standardWindowButton(.zoomButton)?.isHidden = true
RegisterGeneratedPlugins(registry: flutterViewController)
super.awakeFromNib()
}
}
注意事项
- 隐藏这些按钮后,你需要提供自己的窗口控制方式(如自定义按钮)
- 确保你的应用仍然符合 macOS 的人机界面指南
- 完全隐藏这些按钮可能会影响用户体验,建议谨慎使用
如果你只需要隐藏特定按钮而不是全部,可以在方法二中只设置你想要的按钮的 isHidden
属性为 true
。
希望这些信息对你有帮助!