Flutter实现macOS 26风格圆角窗口的方法咨询
Flutter实现macOS 26风格圆角窗口的方法咨询
嘿,我完全懂你想把Flutter macOS应用的窗口圆角改成macOS 26那种风格的需求——毕竟新系统的圆角视觉上更柔和舒服。其实这可以通过两种主流方式实现,我给你一步步拆解具体操作,你可以根据自己的偏好选:
方法一:用window_manager包快速实现(推荐,少写原生代码)
这个社区维护的包能帮你简化窗口的各种定制,不用写太多Swift代码就能搞定圆角:
1. 添加依赖到pubspec.yaml
在你的项目根目录的pubspec.yaml里加入:
dependencies: flutter: sdk: flutter window_manager: ^0.3.8 # 可以去pub.dev查最新版本号替换
然后执行flutter pub get安装依赖。
2. 初始化并设置窗口圆角
修改你的main.dart文件,在启动时配置窗口:
import 'package:flutter/material.dart'; import 'package:window_manager/window_manager.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // 先初始化window_manager await windowManager.ensureInitialized(); // 配置基础窗口选项 WindowOptions windowOptions = WindowOptions( size: const Size(800, 600), center: true, title: "Rounded Window Demo", // 若要隐藏系统标题栏(自定义Flutter标题栏),可启用这个 titleBarStyle: TitleBarStyle.hidden, ); windowManager.waitUntilReadyToShow(windowOptions, () async { await windowManager.show(); await windowManager.focus(); // 设置圆角半径,macOS 26的圆角偏大,你可以调整数值(比如16.0/20.0) await windowManager.setWindowCornerRadius(20.0); }); runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( // 隐藏系统标题栏后,给自定义AppBar加拖拽功能 appBar: AppBar( title: const Text("Rounded Window"), leading: GestureDetector( onPanStart: (details) => windowManager.startDragging(), child: const Icon(Icons.drag_indicator), ), ), body: const Center(child: Text("Hello macOS 26-style rounded corners!")), ), ); } }
3. 配置macOS原生端
打开macOS/Runner/AppDelegate.swift,添加window_manager的初始化代码:
import Cocoa import FlutterMacOS import window_manager class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } override func applicationDidFinishLaunching(_ notification: Notification) { // 初始化window_manager的macOS端 WindowManagerMacOS.initialize() super.applicationDidFinishLaunching(notification) } }
方法二:直接修改原生Swift代码(无依赖,更原生)
如果你不想引入第三方包,直接修改macOS原生代码也能实现:
打开macOS/Runner/AppDelegate.swift,修改applicationDidFinishLaunching方法:
import Cocoa import FlutterMacOS class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } override func applicationDidFinishLaunching(_ notification: Notification) { super.applicationDidFinishLaunching(notification) // 获取应用主窗口 if let mainWindow = NSApplication.shared.mainWindow { // 设置圆角半径,按需调整数值 mainWindow.cornerRadius = 20.0 // 若要隐藏系统标题栏,开启全屏内容视图模式 mainWindow.styleMask.insert(.fullSizeContentView) mainWindow.titlebarAppearsTransparent = true mainWindow.titleVisibility = .hidden } } }
几个关键注意事项
- 数值调整:macOS 26的圆角比旧系统更大,你可以多试几个数值(比如16.0/20.0),找到最贴合的效果。
- 热重载无效:不管用哪种方法,修改原生代码或窗口初始化配置后,都需要重新执行
flutter run,热重载不会生效。 - 自定义标题栏拖拽:如果隐藏了系统标题栏,一定要给你的Flutter标题栏加上拖拽逻辑,不然用户没法拖动窗口(方法一的示例已经包含了)。
如果操作中遇到圆角不生效、窗口样式冲突等问题,随时告诉我具体场景,我再帮你排查!




