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) + } } }