Flutter如何在macOS中自定义状态栏
在Flutter开发macOS应用时,如何自定义窗口顶部状态栏的样式和内容?比如修改背景色、添加自定义按钮或图标,或者调整状态栏的高度和布局?
2 回复
在 macOS 中自定义 Flutter 应用的状态栏(菜单栏),可以通过以下步骤实现:
1. 修改 macos/Runner/AppDelegate.swift
在 macOS 项目中,编辑 AppDelegate.swift 文件,调整状态栏样式:
import Cocoa
import FlutterMacOS
@NSApplicationMain
class AppDelegate: FlutterAppDelegate {
override func applicationDidFinishLaunching(_ notification: Notification) {
// 隐藏标题栏和工具栏(可选)
if let window = NSApplication.shared.windows.first {
window.titleVisibility = .hidden
window.titlebarAppearsTransparent = true
window.styleMask.insert(.fullSizeContentView)
}
// 设置状态栏样式
NSApplication.shared.setActivationPolicy(.regular) // 确保应用显示在 Dock 和菜单栏
}
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
}
2. 自定义状态栏菜单(系统菜单栏)
如果需要添加自定义菜单项,在 AppDelegate.swift 中添加:
override func applicationWillFinishLaunching(_ notification: Notification) {
// 创建自定义菜单
let mainMenu = NSMenu()
let appMenuItem = NSMenuItem()
mainMenu.addItem(appMenuItem)
let appMenu = NSMenu()
appMenuItem.submenu = appMenu
// 添加菜单项
appMenu.addItem(NSMenuItem(title: "关于", action: #selector(NSApplication.orderFrontStandardAboutPanel(_:)), keyEquivalent: ""))
appMenu.addItem(NSMenuItem.separator())
appMenu.addItem(NSMenuItem(title: "退出", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))
NSApplication.shared.mainMenu = mainMenu
}
3. 使用 bitsdojo_window 包(推荐)
对于更高级的自定义(如隐藏标题栏、自定义窗口控制),可使用第三方包:
- 添加依赖:
dependencies:
bitsdojo_window_macos: ^0.1.1
- 在
main.dart中初始化:
import 'package:bitsdojo_window_macos/bitsdojo_window_macos.dart';
void main() {
runApp(MyApp());
doWhenWindowReady(() {
final win = appWindow;
win.size = Size(800, 600);
win.alignment = Alignment.center;
win.show();
});
}
- 自定义标题栏:
AppBar(
backgroundColor: Colors.transparent,
elevation: 0,
toolbarHeight: 30,
title: MoveWindow(), // 允许拖动
actions: [
MinimizeWindowButton(),
MaximizeWindowButton(),
CloseWindowButton(),
],
)
注意事项:
- 修改系统菜单栏主要影响应用菜单(如“文件”、“编辑”等)。
- 若要完全自定义窗口样式(如无边框),需结合
bitsdojo_window或修改原生代码。 - 测试时请使用
flutter run -d macos运行 macOS 版本。
通过以上方法,你可以灵活控制 macOS 状态栏和窗口样式,实现更符合设计需求的应用界面。


