From 15133b8a72e1a4435b72db62d366e89be0e544f1 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Tue, 30 Jun 2026 01:27:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(client/macos):=20=E5=BC=80=E6=9C=BA?= =?UTF-8?q?=E8=87=AA=E5=90=AF=E9=9A=90=E8=97=8F=E5=88=B0=E6=89=98=E7=9B=98?= =?UTF-8?q?(--autostart),=E4=B8=8E=20Windows=20=E5=AF=B9=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit macOS 登录项(launch_at_startup)注册时带 args:['--autostart'];main() 读该参数 windowManager.hide();MainFlutterWindow.awakeFromNib 检测到 --autostart 时 orderOut 兜底(避免 storyboard Visible At Launch 闪窗)。常规启动无参数,正常显示窗口。 Co-Authored-By: Claude Opus 4.8 --- client/lib/state/settings_provider.dart | 9 +++++++-- client/macos/Runner/MainFlutterWindow.swift | 7 +++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/client/lib/state/settings_provider.dart b/client/lib/state/settings_provider.dart index 62f3e59..e8dbfa9 100644 --- a/client/lib/state/settings_provider.dart +++ b/client/lib/state/settings_provider.dart @@ -115,9 +115,14 @@ class SettingsController extends StateNotifier { await _applyWindowsAutostart(v); return; } - // macOS/Linux:登录项即可(无需管理员)。 + // macOS/Linux:登录项即可(无需管理员)。带 --autostart:登录拉起时隐藏到托盘 + // (与 Windows 一致;main.dart 读该参数 windowManager.hide(),macOS 原生侧 orderOut 兜底)。 final info = await PackageInfo.fromPlatform(); - launchAtStartup.setup(appName: info.appName, appPath: Platform.resolvedExecutable); + launchAtStartup.setup( + appName: info.appName, + appPath: Platform.resolvedExecutable, + args: const ['--autostart'], + ); if (v) { await launchAtStartup.enable(); } else { diff --git a/client/macos/Runner/MainFlutterWindow.swift b/client/macos/Runner/MainFlutterWindow.swift index 06cb00f..aaf2dd0 100644 --- a/client/macos/Runner/MainFlutterWindow.swift +++ b/client/macos/Runner/MainFlutterWindow.swift @@ -19,5 +19,12 @@ class MainFlutterWindow: NSWindow { VpnChannel.register(with: flutterViewController.registrar(forPlugin: "VpnChannel")) super.awakeFromNib() + + // 开机自启(登录项带 --autostart):不弹主窗口,直接隐藏到托盘(与 Windows 一致)。 + // Dart 侧 main() 也会 windowManager.hide();这里原生 orderOut 兜底,避免 storyboard + // "Visible At Launch" 把窗口闪出来。常规启动(无参数)正常显示。 + if CommandLine.arguments.contains("--autostart") { + self.orderOut(nil) + } } }