diff --git a/lib/app_upgrade_simple.dart b/lib/app_upgrade_simple.dart index da6f4de..ed4a7a7 100644 --- a/lib/app_upgrade_simple.dart +++ b/lib/app_upgrade_simple.dart @@ -362,33 +362,64 @@ class AppUpgradeSimple { // 3. 比较版本并构建 UpgradeInfo bool hasUpdate = false; - if (serverInfo.versionBuildNumber > 0) { + + final versionName = serverInfo.versionName; + final versionBuildNumber = serverInfo.versionBuildNumber; + + /// 断言 判断 serverInfo 的版本名称和版本号不可都为null + assert( + !(versionBuildNumber == null && versionName == null), + 'versionBuildNumber和versionName不可同时为NULL', + ); + + if (versionBuildNumber != null && versionBuildNumber > 0) { // 优先比较 buildNumber - if (serverInfo.versionBuildNumber > currentBuildNumber) { + if (versionBuildNumber > currentBuildNumber) { hasUpdate = true; - } else if (serverInfo.versionBuildNumber == currentBuildNumber) { + } else if (versionBuildNumber == currentBuildNumber) { // buildNumber 相同,比较版本名 - if (_compareVersionStrings(serverInfo.versionName, currentVersionName) > 0) { + if (versionName != null && _compareVersionStrings(versionName, currentVersionName) > 0) { hasUpdate = true; } } } else { // 只比较版本名 - if (_compareVersionStrings(serverInfo.versionName, currentVersionName) > 0) { + if (versionName != null && _compareVersionStrings(versionName, currentVersionName) > 0) { hasUpdate = true; } } + // if (versionBuildNumber > 0) { + // // 优先比较 buildNumber + // if (versionBuildNumber > currentBuildNumber) { + // hasUpdate = true; + // } else if (versionBuildNumber == currentBuildNumber) { + // // buildNumber 相同,比较版本名 + // if (_compareVersionStrings(versionName, currentVersionName) > 0) { + // hasUpdate = true; + // } + // } + // } else { + // // 只比较版本名 + // if (_compareVersionStrings(versionName, currentVersionName) > 0) { + // hasUpdate = true; + // } + // } + if (config.enableDebugLog) { debugPrint('📊 版本比较结果: ${hasUpdate ? "有新版本" : "已是最新"}'); } // 构建 UpgradeInfo + // 兜底处理,避免 serverInfo 里的可空字段传入非空参数导致崩溃 + final safeVersionName = serverInfo.versionName ?? currentVersionName; + final safeVersionBuildNumber = serverInfo.versionBuildNumber ?? currentBuildNumber; + return UpgradeInfo( hasUpdate: hasUpdate, isForceUpdate: serverInfo.isForce, - versionName: serverInfo.versionName, - versionBuildNumber: serverInfo.versionBuildNumber, + versionName: safeVersionName, + versionBuildNumber: safeVersionBuildNumber, currentVersionName: currentVersionName, currentBuildNumber: currentBuildNumber, updateContent: serverInfo.updateContent, diff --git a/lib/models/app_upgrade_version.dart b/lib/models/app_upgrade_version.dart index 27bb7c1..bf3dc86 100644 --- a/lib/models/app_upgrade_version.dart +++ b/lib/models/app_upgrade_version.dart @@ -5,10 +5,10 @@ import 'app_upgrade_method.dart'; /// 用户只需返回此类的实例,插件会自动获取当前App版本进行比对 class AppUpgradeVersion { /// 版本名称 (如 "1.0.0") - final String versionName; + final String? versionName; /// 版本号 (如 10) - final int versionBuildNumber; + final int? versionBuildNumber; /// 更新内容 final String updateContent; @@ -37,9 +37,9 @@ class AppUpgradeVersion { final List? supportedMethods; AppUpgradeVersion({ - required this.versionName, - required this.versionBuildNumber, required this.updateContent, + this.versionName, + this.versionBuildNumber, this.downloadUrl, this.isForce = false, this.appStoreUrl, diff --git a/pubspec.yaml b/pubspec.yaml index 4a5b674..e7b7107 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: yx_app_upgrade_flutter description: "A universal, robust, and high-performance Flutter app upgrade plugin with smart update features." -version: 1.0.0 +version: 1.0.1 homepage: https://github.com/yourusername/yx_app_upgrade_flutter environment: