完善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 {
|
Future<bool> isVersionUpdated(String targetVersion, int? targetBuildNumber) async {
|
||||||
try {
|
try {
|
||||||
final appInfo = await getCurrentAppInfo();
|
final appInfo = await getCurrentAppInfo();
|
||||||
|
|
@ -86,16 +101,66 @@ class _SimpleAppUpgradePlugin {
|
||||||
|
|
||||||
// 优先比较构建号(更准确)
|
// 优先比较构建号(更准确)
|
||||||
if (targetBuildNumber != null && targetBuildNumber > 0) {
|
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) {
|
} catch (e) {
|
||||||
debugPrint('版本对比失败: $e');
|
debugPrint('版本对比失败: $e');
|
||||||
return false;
|
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