@@ -53,7 +53,7 @@ final appRouter = AppRouter();
5353// 全局事件总线实例
5454EventBus eventBus = EventBus ();
5555
56- final logger = Logger ();
56+ var logger = Logger ();
5757
5858List <String > cfIpList = [];
5959
@@ -162,18 +162,22 @@ Future<void> main() async {
162162 return true ; // 表示错误已处理
163163 };
164164 } else {
165- await Firebase .initializeApp (
166- options: DefaultFirebaseOptions .currentPlatform,
167- );
165+ if (! Platform .isLinux) {
166+ await Firebase .initializeApp (
167+ options: DefaultFirebaseOptions .currentPlatform,
168+ );
168169
169- FlutterError .onError = (FlutterErrorDetails errorDetails) {
170- FirebaseCrashlytics .instance.recordFlutterFatalError (errorDetails);
171- };
170+ FlutterError .onError = (FlutterErrorDetails errorDetails) {
171+ FirebaseCrashlytics .instance.recordFlutterFatalError (errorDetails);
172+ };
172173
173- PlatformDispatcher .instance.onError = (error, stack) {
174- FirebaseCrashlytics .instance.recordError (error, stack, fatal: true );
175- return true ; // 表示错误已处理
176- };
174+ PlatformDispatcher .instance.onError = (error, stack) {
175+ FirebaseCrashlytics .instance.recordError (error, stack, fatal: true );
176+ return true ; // 表示错误已处理
177+ };
178+ } else {
179+ logger = Logger (filter: ProductionFilter (), output: ConsoleOutput ());
180+ }
177181 }
178182
179183 runApp (
@@ -191,6 +195,10 @@ Future<void> main() async {
191195 if (kDebugMode) {
192196 logger.e (error, error: error, stackTrace: stackTrace);
193197 } else {
198+ if (Platform .isLinux) {
199+ return ;
200+ }
201+
194202 FirebaseCrashlytics .instance.recordError (
195203 error,
196204 stackTrace,
@@ -213,6 +221,7 @@ class _MyAppState extends State<MyApp> with WindowListener, TrayListener {
213221 void initState () {
214222 super .initState ();
215223 windowManager.addListener (this );
224+ _init ();
216225 WindowLogic .initWindow (context).then ((_) {
217226 // 窗口初始化完成后,拦截关闭按钮
218227 windowManager.setPreventClose (true );
@@ -251,22 +260,37 @@ class _MyAppState extends State<MyApp> with WindowListener, TrayListener {
251260
252261 @override
253262 void onWindowClose () async {
254- // 如果窗口可见,点 X 只是隐藏到托盘
255- bool isVisible = await windowManager.isVisible ();
256- if (isVisible) {
257- windowManager.hide ();
258- } else {
259- // 窗口已隐藏却收到 WM_CLOSE,说明是系统关机或安装器在关闭
260- _performGracefulExit ();
263+ bool isPreventClose = await windowManager.isPreventClose ();
264+ if (isPreventClose) {
265+ final dialogContext = appRouter.navigatorKey.currentContext;
266+ if (dialogContext == null || ! dialogContext.mounted) return ;
267+ showDialog (
268+ context: dialogContext,
269+ builder: (context) {
270+ return AlertDialog (
271+ title: Text ('您确定要关闭此窗口吗?' ),
272+ actions: [
273+ TextButton (
274+ child: Text ('否' ),
275+ onPressed: () {
276+ Navigator .of (context).pop ();
277+ },
278+ ),
279+ TextButton (
280+ child: Text ('是' ),
281+ onPressed: () async {
282+ Navigator .of (context).pop ();
283+ await windowManager.destroy ();
284+ },
285+ ),
286+ ],
287+ );
288+ },
289+ );
261290 }
262291 }
263292
264- /// 优雅退出:关闭数据库、释放资源后退出
265293 Future <void > _performGracefulExit () async {
266- logger.i ("收到退出指令,正在清理资源..." );
267- await windowManager.setPreventClose (false );
268- objectbox.store.close ();
269- await Hive .close ();
270294 exit (0 );
271295 }
272296
@@ -296,6 +320,12 @@ class _MyAppState extends State<MyApp> with WindowListener, TrayListener {
296320 }
297321 }
298322
323+ void _init () async {
324+ // 添加此行以覆盖默认的关闭处理程序
325+ await windowManager.setPreventClose (true );
326+ setState (() {});
327+ }
328+
299329 @override
300330 Widget build (BuildContext context) {
301331 final globalSettingState = context.watch <GlobalSettingCubit >().state;
0 commit comments