在 Flutter 桌面开发中隐藏 macOS 窗口控制按钮

要在 Flutter 桌面应用中隐藏 macOS 窗口的默认关闭、最大化和最小化按钮,你可以使用 window_manager 插件或直接修改 macOS 原生代码。以下是两种方法:

方法一:使用 window_manager 插件

  1. 首先添加 window_manager 依赖到你的 pubspec.yaml:
dependencies:
  window_manager: ^0.3.0
  1. 在 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 原生代码

  1. 打开 macos/Runner/MainFlutterWindow.swift 文件

  2. 修改 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()
  }
}

注意事项

  1. 隐藏这些按钮后,你需要提供自己的窗口控制方式(如自定义按钮)
  2. 确保你的应用仍然符合 macOS 的人机界面指南
  3. 完全隐藏这些按钮可能会影响用户体验,建议谨慎使用

如果你只需要隐藏特定按钮而不是全部,可以在方法二中只设置你想要的按钮的 isHidden 属性为 true

希望这些信息对你有帮助!

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!