|
|
|
@ -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( |
|
|
|
|