From 1cf4b636efc97794bb5b30fbc113ceee250cd8d1 Mon Sep 17 00:00:00 2001 From: wanghongenpin Date: Sat, 29 Mar 2025 02:40:43 +0800 Subject: [PATCH] Exception handling for loading app config --- lib/main.dart | 16 ++++++++-------- lib/ui/configuration.dart | 17 +++++++++-------- lib/ui/desktop/request/domians.dart | 11 ++++++----- pubspec.yaml | 4 ++-- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 3123533..352b2f8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -38,6 +38,14 @@ import 'network/util/logger.dart'; void main(List args) async { WidgetsFlutterBinding.ensureInitialized(); + //多窗口 + if (args.firstOrNull == 'multi_window') { + final windowId = int.parse(args[1]); + final argument = args[2].isEmpty ? const {} : jsonDecode(args[2]) as Map; + runApp(FluentApp(multiWindow(windowId, argument), (await AppConfiguration.instance))); + return; + } + if (Platform.isWindows) { await WindowsSingleInstance.ensureSingleInstance([], "ProxyPin", onSecondWindow: (args) { logger.d('WindowsSingleInstance onSecondWindow $args'); @@ -46,14 +54,6 @@ void main(List args) async { } var instance = AppConfiguration.instance; - //多窗口 - if (args.firstOrNull == 'multi_window') { - final windowId = int.parse(args[1]); - final argument = args[2].isEmpty ? const {} : jsonDecode(args[2]) as Map; - runApp(FluentApp(multiWindow(windowId, argument), (await instance))); - return; - } - var configuration = Configuration.instance; //移动端 if (Platforms.isMobile()) { diff --git a/lib/ui/configuration.dart b/lib/ui/configuration.dart index 6e5ee78..e91e957 100644 --- a/lib/ui/configuration.dart +++ b/lib/ui/configuration.dart @@ -14,7 +14,6 @@ * limitations under the License. */ - import 'dart:convert'; import 'dart:io'; @@ -93,9 +92,14 @@ class AppConfiguration { static Future get instance async { if (_instance == null) { - AppConfiguration configuration = AppConfiguration._(); - await configuration.initConfig(); - _instance = configuration; + try { + AppConfiguration configuration = AppConfiguration._(); + await configuration.initConfig(); + _instance = configuration; + } catch (e) { + logger.e("load config error: $e"); + _instance = AppConfiguration._(); + } } return _instance!; } @@ -145,7 +149,7 @@ class AppConfiguration { Future get _path async { if (Platforms.isDesktop()) { var userHome = Platform.environment['HOME'] ?? Platform.environment['USERPROFILE']; - return File('$userHome/.proxypin/ui_config.json'); + return File('$userHome${Platform.pathSeparator}.proxypin${Platform.pathSeparator}ui_config.json'); } final directory = await getApplicationSupportDirectory(); @@ -225,13 +229,10 @@ class AppConfiguration { 'upgradeNoticeV17': upgradeNoticeV17, "language": _language?.languageCode, "headerExpanded": headerExpanded, - if (memoryCleanupThreshold != null) 'memoryCleanupThreshold': memoryCleanupThreshold, - if (Platforms.isMobile()) 'pipEnabled': pipEnabled.value, if (Platforms.isMobile()) 'pipIcon': pipIcon.value ? true : null, if (Platforms.isMobile()) 'bottomNavigation': bottomNavigation, - if (Platforms.isDesktop()) "windowSize": windowSize == null ? null : {"width": windowSize?.width, "height": windowSize?.height}, if (Platforms.isDesktop()) diff --git a/lib/ui/desktop/request/domians.dart b/lib/ui/desktop/request/domians.dart index 99055f9..6462173 100644 --- a/lib/ui/desktop/request/domians.dart +++ b/lib/ui/desktop/request/domians.dart @@ -412,17 +412,18 @@ class _DomainRequestsState extends State { if (!changing) { changing = true; Future.delayed(const Duration(milliseconds: 500), () { - setState(() { - changing = false; - }); - transitionState.currentState?.show(); + if (mounted) { + setState(() { + changing = false; + }); + transitionState.currentState?.show(); + } }); } } @override Widget build(BuildContext context) { - return Column(children: [ _hostWidget(widget.domain), Offstage(offstage: !selected, child: Column(children: widget.body.toList())) diff --git a/pubspec.yaml b/pubspec.yaml index ffaf960..e310e1e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -24,7 +24,7 @@ dependencies: url: https://gitee.com/wanghongenpin/flutter-plugins.git path: packages/desktop_multi_window path_provider: ^2.1.5 - file_picker: ^9.0.2 + file_picker: ^9.2.3 proxy_manager: ^0.0.3 permission_handler: ^11.3.1 flutter_toastr: ^1.0.3 @@ -36,7 +36,7 @@ dependencies: ref: secure-keyboard flutter_desktop_context_menu: ^0.2.0 device_info_plus: ^11.2.1 - shared_preferences: ^2.3.5 + shared_preferences: ^2.5.3 image_pickers: ^2.0.5+2 url_launcher: ^6.3.1