Browse Source

feat(版本更新): 添加主版本号不同时强制更新的逻辑

添加_shouldForceUpdate方法判断主版本号差异,当主版本号不同时返回强制更新类型
newdev_shunjiawei
lxm 1 year ago
parent
commit
d8c36ffb70
  1. 35
      lib/data/services/version_update_service.dart

35
lib/data/services/version_update_service.dart

@ -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) {

Loading…
Cancel
Save