Browse Source

refactor(ota_upgrade): 优化版本比较逻辑以支持升级和降级

改进版本比较方法,支持版本号长度不一致的情况,并允许检测升级和降级。同时将变量名从isUpdate改为hasUpdate以提高可读性,并添加flutter_screenutil的宽度单位
newdev_shunjiawei
lxm 1 year ago
parent
commit
8cbaa5c5da
  1. 38
      lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart

38
lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart

@ -1,4 +1,5 @@
import 'package:classic_bluetooth/classic_bluetooth.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:voitrans/data/models/appconfig_model.dart';
import '/routes/app_routes.dart';
import 'package:logger/web.dart';
@ -214,10 +215,9 @@ class OtaUpgradeController extends GetxController {
updatepackageaddress = product!.updatepackageaddress!;
// 版本检查
bool isUpdate = _isNewVersionAvailable(product.version!);
bool hasUpdate = _isNewVersionAvailable(product.version!);
isUpdateAvailable.value = isUpdate;
isUpdateAvailable.value = hasUpdate;
} catch (e) {
// 统一错误处理
errorMessage.value = e.toString();
@ -238,22 +238,36 @@ class OtaUpgradeController extends GetxController {
}
}
// 版本比较方法优化
bool _isNewVersionAvailable(String latest) {
// 版本比较方法优化 - 支持升级和降级
bool _isNewVersionAvailable(String latestVersion) {
try {
List<int> currentParts = currentVersion.value
.split('.')
.map((e) => int.parse(e.trim()))
.toList();
List<int> latestParts =
latest.split('.').map((e) => int.parse(e.trim())).toList();
latestVersion.split('.').map((e) => int.parse(e.trim())).toList();
// 确保两个版本号长度一致,短的用0补齐
int maxLength = currentParts.length > latestParts.length
? currentParts.length
: latestParts.length;
for (int i = 0; i < latestParts.length; i++) {
int current = (i < currentParts.length) ? currentParts[i] : 0;
if (latestParts[i] > current) return true;
if (latestParts[i] < current) return false;
while (currentParts.length < maxLength) {
currentParts.add(0);
}
return false;
while (latestParts.length < maxLength) {
latestParts.add(0);
}
// 比较每一段,只要有不同就返回true(支持升级和降级)
for (int i = 0; i < maxLength; i++) {
if (latestParts[i] != currentParts[i]) {
return true; // 版本不同,允许更新(升级或降级)
}
}
return false; // 版本完全相同,无需更新
} catch (e) {
Logger().d('版本比较错误: $e');
return false;
@ -654,7 +668,7 @@ class OtaUpgradeController extends GetxController {
color: Colors.green[600],
size: 28,
),
SizedBox(width: 12),
SizedBox(width: 12.w),
Text(
'升级成功',
style: TextStyle(

Loading…
Cancel
Save