From 60ecbd20e35b27cdba08c4e18857b5ac40eb8da6 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Thu, 10 Jul 2025 11:34:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=BB=E7=89=88=E6=9C=AC=E5=8F=B7=E4=B8=8D?= =?UTF-8?q?=E5=90=8C=E6=97=B6=E5=BC=BA=E5=88=B6=E6=9B=B4=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加_shouldForceUpdate方法判断主版本号差异,当主版本号不同时返回强制更新类型 --- lib/data/services/version_update_service.dart | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/data/services/version_update_service.dart b/lib/data/services/version_update_service.dart index 4e38d4128..6d44c34a1 100644 --- a/lib/data/services/version_update_service.dart +++ b/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) {