import 'dart:io'; import 'package:flutter/material.dart'; import 'package:window_manager/window_manager.dart'; import 'agent.dart'; import 'setup/single_instance.dart'; import 'setup/url_scheme.dart'; import 'ui/app_shell.dart'; import 'ui/app_tray.dart'; /// 资安信插件助手(desktop-plugin):桌面插件集成软件。 /// 当前内置插件:饭卡打印机(card-printer);左侧菜单与插件页均由 lib/ui/routes.dart 驱动。 /// 关闭窗口 = 最小化到后台托盘,服务持续运行;退出入口在托盘菜单。 Future main(List args) async { WidgetsFlutterBinding.ensureInitialized(); await windowManager.ensureInitialized(); // 单实例:zaxprint:// 唤起或重复双击会启动第二进程——通知常驻实例弹窗后自己退出 final isPrimary = await SingleInstance.acquire( onWake: () async { await windowManager.show(); await windowManager.focus(); }, ); if (!isPrimary) { exit(0); } final agent = Agent(AgentOptions.parse(args)); String? startError; try { await agent.start(); } catch (e) { startError = '$e'; } await UrlScheme.ensureRegistered(); // Windows 运行时注册 zaxprint://;mac 由 Info.plist 声明 final appTray = AppTray(agent: agent); await appTray.start(); runApp(DesktopPluginApp(agent: agent, startError: startError)); } class DesktopPluginApp extends StatelessWidget { const DesktopPluginApp({super.key, required this.agent, this.startError}); final Agent agent; final String? startError; @override Widget build(BuildContext context) { return MaterialApp( title: '资安信插件助手', debugShowCheckedModeBanner: false, theme: _darkTheme(), home: AppShell(agent: agent, startError: startError), ); } /// 深色运维风格(ui-ux-pro-max 设计系统:OLED 深底 + 运维三色语义)。 ThemeData _darkTheme() { final base = ThemeData(brightness: Brightness.dark, useMaterial3: true); final scheme = base.colorScheme.copyWith( // 正常/主操作:operational green primary: const Color(0xFF4ADE80), onPrimary: const Color(0xFF052E16), primaryContainer: const Color(0xFF14532D), onPrimaryContainer: const Color(0xFFDCFCE7), // 故障红 error: const Color(0xFFF87171), errorContainer: const Color(0xFF7F1D1D), onErrorContainer: const Color(0xFFFEE2E2), // 表面层级:#0F172A 底 / #111827 卡 / #1E293B 强调 surface: const Color(0xFF0F172A), onSurface: const Color(0xFFF8FAFC), onSurfaceVariant: const Color(0xFFCBD5E1), surfaceContainerLow: const Color(0xFF111827), surfaceContainerHighest: const Color(0xFF1E293B), outlineVariant: const Color(0xFF334155), ); return base.copyWith( colorScheme: scheme, scaffoldBackgroundColor: const Color(0xFF0F172A), cardTheme: const CardTheme(color: Color(0xFF111827)), snackBarTheme: const SnackBarThemeData(behavior: SnackBarBehavior.floating), dividerTheme: const DividerThemeData(color: Color(0xFF334155), thickness: 1), ); } }