|
|
|
@ -160,12 +160,20 @@ class VersionUpdateService extends GetxService { |
|
|
|
// final appInfo = channelAppResponse.data!.app; |
|
|
|
final hasUpdate = _compareVersions(currentVersion, appInfo.version); |
|
|
|
|
|
|
|
// 判断更新类型:如果主版本号不同则强制更新 |
|
|
|
UpdateType updateType = UpdateType.none; |
|
|
|
if (hasUpdate) { |
|
|
|
final isForceUpdate = |
|
|
|
_shouldForceUpdate(currentVersion, appInfo.version); |
|
|
|
updateType = isForceUpdate ? UpdateType.force : UpdateType.optional; |
|
|
|
} |
|
|
|
|
|
|
|
return VersionUpdateInfo( |
|
|
|
hasUpdate: hasUpdate, |
|
|
|
currentVersion: currentVersion, |
|
|
|
latestVersion: appInfo.version, |
|
|
|
appInfo: appInfo, |
|
|
|
updateType: hasUpdate ? UpdateType.optional : UpdateType.none, |
|
|
|
updateType: updateType, |
|
|
|
); |
|
|
|
} catch (e) { |
|
|
|
_logger.e('检查版本更新失败: $e'); |
|
|
|
@ -181,6 +189,31 @@ class VersionUpdateService extends GetxService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// 判断是否需要强制更新 |
|
|
|
/// 当主版本号(第一位数字)不同时返回true |
|
|
|
bool _shouldForceUpdate(String current, String latest) { |
|
|
|
try { |
|
|
|
// 拆分版本号与构建号 |
|
|
|
final currentParts = current.split('+'); |
|
|
|
final latestParts = latest.split('+'); |
|
|
|
|
|
|
|
// 解析版本号 (major.minor.patch) |
|
|
|
final currentVersions = |
|
|
|
currentParts[0].split('.').map(int.parse).toList(); |
|
|
|
final latestVersions = latestParts[0].split('.').map(int.parse).toList(); |
|
|
|
|
|
|
|
// 比较主版本号(第一位) |
|
|
|
if (currentVersions.isNotEmpty && latestVersions.isNotEmpty) { |
|
|
|
return currentVersions[0] != latestVersions[0]; |
|
|
|
} |
|
|
|
|
|
|
|
return false; |
|
|
|
} catch (e) { |
|
|
|
_logger.e('判断强制更新失败: $e'); |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// 比较版本号 |
|
|
|
/// 返回true表示需要更新(远程版本更高) |
|
|
|
bool _compareVersions(String current, String latest) { |
|
|
|
|