diff --git a/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart b/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart index 7adfc296b..91e28e89d 100644 --- a/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart +++ b/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 currentParts = currentVersion.value .split('.') .map((e) => int.parse(e.trim())) .toList(); List 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(