完善isVersionUpdated版本比较逻辑并添加详细注释
This commit is contained in:
parent
894e7a44b0
commit
644b02cc12
|
|
@ -75,6 +75,21 @@ class _SimpleAppUpgradePlugin {
|
|||
}
|
||||
|
||||
/// 比较版本号是否已更新
|
||||
///
|
||||
/// [targetVersion] 目标版本名称(如 "1.0.0")
|
||||
/// [targetBuildNumber] 目标构建号
|
||||
///
|
||||
/// 返回 true 表示当前版本已更新到目标版本或更高版本
|
||||
/// 返回 false 表示当前版本低于目标版本,需要升级
|
||||
///
|
||||
/// 判断逻辑:
|
||||
/// 1. 优先比较 buildNumber(构建号):
|
||||
/// - 当前 buildNumber < 目标 buildNumber → 未更新,需要升级
|
||||
/// - 当前 buildNumber > 目标 buildNumber → 已更新
|
||||
/// - 当前 buildNumber == 目标 buildNumber → 继续比较版本名称
|
||||
/// 2. buildNumber 相同时,比较 versionName:
|
||||
/// - 当前版本 >= 目标版本 → 已更新
|
||||
/// - 当前版本 < 目标版本 → 未更新,需要升级
|
||||
Future<bool> isVersionUpdated(String targetVersion, int? targetBuildNumber) async {
|
||||
try {
|
||||
final appInfo = await getCurrentAppInfo();
|
||||
|
|
@ -86,16 +101,66 @@ class _SimpleAppUpgradePlugin {
|
|||
|
||||
// 优先比较构建号(更准确)
|
||||
if (targetBuildNumber != null && targetBuildNumber > 0) {
|
||||
return currentBuildNumber >= targetBuildNumber;
|
||||
// 1. 首先比较 buildCode(构建号)
|
||||
if (currentBuildNumber < targetBuildNumber) {
|
||||
// 当前 buildCode < 目标版本,未更新
|
||||
return false;
|
||||
} else if (currentBuildNumber > targetBuildNumber) {
|
||||
// 当前 buildCode > 目标版本,已更新
|
||||
return true;
|
||||
}
|
||||
|
||||
// 2. buildCode 相同时,比较 versionName 字符串版本号
|
||||
// 当前版本 >= 目标版本时,表示已更新
|
||||
return _compareVersionStrings(currentVersion, targetVersion) >= 0;
|
||||
}
|
||||
|
||||
// 备用方案:比较版本号
|
||||
return currentVersion == targetVersion;
|
||||
// 备用方案:只比较版本号字符串
|
||||
return _compareVersionStrings(currentVersion, targetVersion) >= 0;
|
||||
} catch (e) {
|
||||
debugPrint('版本对比失败: $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// 比较版本号字符串
|
||||
///
|
||||
/// [v1] 第一个版本号字符串(如 "1.2.3")
|
||||
/// [v2] 第二个版本号字符串(如 "1.3.0")
|
||||
///
|
||||
/// 返回值:
|
||||
/// - -1 表示 v1 < v2(第一个版本低于第二个版本)
|
||||
/// - 0 表示 v1 == v2(版本相同)
|
||||
/// - 1 表示 v1 > v2(第一个版本高于第二个版本)
|
||||
///
|
||||
/// 示例:
|
||||
/// - _compareVersionStrings("1.2.3", "1.3.0") 返回 -1
|
||||
/// - _compareVersionStrings("2.0.0", "1.9.9") 返回 1
|
||||
/// - _compareVersionStrings("1.0.0", "1.0.0") 返回 0
|
||||
int _compareVersionStrings(String v1, String v2) {
|
||||
try {
|
||||
final v1Parts = v1.split('.').map((e) => int.tryParse(e) ?? 0).toList();
|
||||
final v2Parts = v2.split('.').map((e) => int.tryParse(e) ?? 0).toList();
|
||||
|
||||
final maxLength = v1Parts.length > v2Parts.length ? v1Parts.length : v2Parts.length;
|
||||
|
||||
for (int i = 0; i < maxLength; i++) {
|
||||
final part1 = i < v1Parts.length ? v1Parts[i] : 0;
|
||||
final part2 = i < v2Parts.length ? v2Parts[i] : 0;
|
||||
|
||||
if (part1 < part2) {
|
||||
return -1;
|
||||
} else if (part1 > part2) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
} catch (e) {
|
||||
// 如果解析失败,使用字符串比较
|
||||
return v1.compareTo(v2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 升级配置选项
|
||||
|
|
|
|||
Loading…
Reference in New Issue