完善isVersionUpdated版本比较逻辑并添加详细注释

This commit is contained in:
DESKTOP-I3JPKHK\wy 2025-10-31 10:29:14 +08:00
parent 894e7a44b0
commit 644b02cc12
1 changed files with 68 additions and 3 deletions

View File

@ -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);
}
}
} }
/// ///