From f7d44c9a3465b0f999817db2e50a9643d49ffe40 Mon Sep 17 00:00:00 2001 From: "DESKTOP-I3JPKHK\\wy" <1111> Date: Tue, 25 Nov 2025 18:00:20 +0800 Subject: [PATCH] 111 --- lib/app_upgrade_plugin_method_channel.dart | 30 +++++++++----- lib/app_upgrade_simple.dart | 48 ++++++++++++++-------- lib/core/permission_helper.dart | 26 ++++++++---- 3 files changed, 67 insertions(+), 37 deletions(-) diff --git a/lib/app_upgrade_plugin_method_channel.dart b/lib/app_upgrade_plugin_method_channel.dart index d45010e..81050fd 100644 --- a/lib/app_upgrade_plugin_method_channel.dart +++ b/lib/app_upgrade_plugin_method_channel.dart @@ -496,20 +496,28 @@ class MethodChannelAppUpgradePlugin extends AppUpgradePluginPlatform { } debugPrint('当前APP没有上架当前设备对应的应用市场'); if (context.mounted) { - try { + // 检查是否有 Scaffold 在 widget 树中 + final scaffold = Scaffold.maybeOf(context); + if (scaffold == null) { + debugPrint('提示(无Scaffold): 当前APP没有上架当前设备对应的应用市场'); + } else { + // 使用 maybeOf 安全地获取 ScaffoldMessenger final scaffoldMessenger = ScaffoldMessenger.maybeOf(context); - if (scaffoldMessenger != null) { - scaffoldMessenger.showSnackBar( - SnackBar( - content: Text('当前APP没有上架当前设备对应的应用市场'), - duration: Duration(seconds: 2), - ), - ); + if (scaffoldMessenger == null) { + debugPrint('提示(无ScaffoldMessenger): 当前APP没有上架当前设备对应的应用市场'); } else { - debugPrint('提示(无Scaffold): 当前APP没有上架当前设备对应的应用市场'); + // 使用 try-catch 捕获所有可能的错误 + try { + scaffoldMessenger.showSnackBar( + SnackBar( + content: Text('当前APP没有上架当前设备对应的应用市场'), + duration: Duration(seconds: 2), + ), + ); + } catch (e) { + debugPrint('显示提示失败: $e'); + } } - } catch (e) { - debugPrint('显示提示失败: $e'); } } // Fluttertoast.showToast(msg: '当前APP没有上架当前设备对应的应用市场'); diff --git a/lib/app_upgrade_simple.dart b/lib/app_upgrade_simple.dart index 7ade107..816888a 100644 --- a/lib/app_upgrade_simple.dart +++ b/lib/app_upgrade_simple.dart @@ -524,30 +524,44 @@ class AppUpgradeSimple { if (effectiveConfig.customToast != null) { effectiveConfig.customToast!(message); } else { - // 检查 context 是否有效且有 Scaffold + // 检查 context 是否有效 if (!context.mounted) { debugPrint('Toast消息(context已卸载): $message'); return; } + // 检查是否有 Scaffold 在 widget 树中 + final scaffold = Scaffold.maybeOf(context); + if (scaffold == null) { + // 如果没有 Scaffold,使用 debugPrint 作为后备方案 + debugPrint('Toast消息(无Scaffold): $message'); + return; + } + + // 使用 maybeOf 安全地获取 ScaffoldMessenger + final scaffoldMessenger = ScaffoldMessenger.maybeOf(context); + if (scaffoldMessenger == null) { + // 如果没有 ScaffoldMessenger,使用 debugPrint 作为后备方案 + debugPrint('Toast消息(无ScaffoldMessenger): $message'); + return; + } + + // 即使有 Scaffold 和 ScaffoldMessenger,也可能出现其他问题 + // 使用 try-catch 捕获所有可能的错误 try { - // 尝试获取 ScaffoldMessenger,如果失败则使用 debugPrint - final scaffoldMessenger = ScaffoldMessenger.maybeOf(context); - if (scaffoldMessenger != null) { - scaffoldMessenger.showSnackBar( - SnackBar( - content: Text(message), - duration: Duration(seconds: 2), - ), - ); - } else { - // 如果没有 Scaffold,使用 debugPrint 作为后备方案 - debugPrint('Toast消息(无Scaffold): $message'); - } + scaffoldMessenger.showSnackBar( + SnackBar( + content: Text(message), + duration: Duration(seconds: 2), + ), + ); } catch (e) { - // 如果出现任何错误,使用 debugPrint 作为后备方案 - debugPrint('显示Toast失败: $e'); - debugPrint('Toast消息: $message'); + // 捕获所有错误,包括断言错误 + // 在调试模式下,断言错误可能仍然会显示,但不会导致应用崩溃 + debugPrint('显示Toast失败(已使用后备方案): $message'); + if (effectiveConfig.enableDebugLog) { + debugPrint('错误详情: $e'); + } } } } diff --git a/lib/core/permission_helper.dart b/lib/core/permission_helper.dart index adb5569..a2835d6 100644 --- a/lib/core/permission_helper.dart +++ b/lib/core/permission_helper.dart @@ -267,18 +267,26 @@ class PermissionHelper { message = '未授予安装权限,无法完成更新。'; break; } - try { + // 检查是否有 Scaffold 在 widget 树中 + final scaffold = Scaffold.maybeOf(context); + if (scaffold == null) { + debugPrint('权限提示(无Scaffold): $message'); + } else { + // 使用 maybeOf 安全地获取 ScaffoldMessenger final scaffoldMessenger = ScaffoldMessenger.maybeOf(context); - if (scaffoldMessenger != null) { - scaffoldMessenger.showSnackBar( - SnackBar(content: Text(message)), - ); + if (scaffoldMessenger == null) { + debugPrint('权限提示(无ScaffoldMessenger): $message'); } else { - debugPrint('权限提示(无Scaffold): $message'); + // 使用 try-catch 捕获所有可能的错误 + try { + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(message)), + ); + } catch (e) { + debugPrint('显示权限提示失败: $e'); + debugPrint('权限提示: $message'); + } } - } catch (e) { - debugPrint('显示权限提示失败: $e'); - debugPrint('权限提示: $message'); } }