You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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标题栏加上拖拽逻辑,不然用户没法拖动窗口(方法一的示例已经包含了)。

如果操作中遇到圆角不生效、窗口样式冲突等问题,随时告诉我具体场景,我再帮你排查!

火山引擎 最新活动