Browse Source

feat(OTA升级): 添加产品配置本地查询功能并优化更新检查

- 在AppConfig中添加getproduct方法用于本地查询产品配置
- 修改OTA升级控制器使用本地配置替代API请求
- 在设置控制器中添加状态锁防止重复检查更新
weicu
lxm 1 year ago
parent
commit
f85ee1e9f0
  1. 6
      lib/data/models/appconfig.dart
  2. 32
      lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart
  3. 14
      lib/modules/settings/controllers/settings_controller.dart

6
lib/data/models/appconfig.dart

@ -30,4 +30,10 @@ class AppConfig {
config.products.map((user) => user.devicename).toList();
return names;
}
static DBProduct? getproduct(String name) {
final foundProduct =
config.products.firstWhere((product) => product.devicename == name);
return foundProduct;
}
}

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

@ -1,4 +1,5 @@
import 'package:classic_bluetooth/classic_bluetooth.dart';
import 'package:voitrans/data/models/appconfig_model.dart';
import '/routes/app_routes.dart';
import 'package:logger/web.dart';
import 'package:flutter/material.dart';
@ -12,6 +13,7 @@ import 'package:dio/dio.dart';
import 'package:path_provider/path_provider.dart';
import 'package:ota/ota.dart';
import '../../../data/services/ble_manager.dart';
import '../../../data/models/appconfig.dart';
class OtaUpgradeController extends GetxController {
static const int NOT_STARTED = -1; // 未开始
@ -193,24 +195,26 @@ class OtaUpgradeController extends GetxController {
_address = connectedDevices.first.address;
}
// API请求
final response = await Api.getproduct({
"id": deviceInfo.firmwareProductId,
});
DBProduct? product = AppConfig.getproduct("DeapSound");
// 处理API响应
if (response['product'] == null) {
throw const FormatException('API 响应格式错误');
}
// // API请求
// final response = await Api.getproduct({
// "id": deviceInfo.firmwareProductId,
// });
// // 处理API响应
// if (response['product'] == null) {
// throw const FormatException('API 响应格式错误');
// }
final resp = OtaConfigResp.fromJson(response);
Logger().d('getequipmentinfo,resp.systemversion: ${resp.systemversion}');
latestVersion.value = resp.systemversion!;
updatedescription.value = resp.updatedescription!;
updatepackageaddress = resp.updatepackageaddress!;
// final resp = OtaConfigResp.fromJson(response);
// Logger().d('getequipmentinfo,resp.systemversion: ${resp.systemversion}');
// latestVersion.value = resp.systemversion!;
// updatedescription.value = resp.updatedescription!;
updatepackageaddress = product!.updatepackageaddress!;
// 版本检查
bool isUpdate = _isNewVersionAvailable(resp.systemversion!);
bool isUpdate = _isNewVersionAvailable(product!.version!);
if (isUpdate) {
await _bleManager.setEnterOta(true);

14
lib/modules/settings/controllers/settings_controller.dart

@ -1,4 +1,3 @@
import 'package:firebase_auth/firebase_auth.dart' as firebase;
import 'package:get/get.dart';
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
@ -7,15 +6,11 @@ import '../../../core/themes/theme_service.dart';
import '../../../data/services/speech_factory.dart';
import '../models/language_model.dart';
import 'package:logger/logger.dart';
import '../../../data/models/user_Info.dart';
import '../../../data/services/ble_manager.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:permission_handler/permission_handler.dart';
import 'dart:async';
import 'package:app_settings/app_settings.dart';
import '../../../data/services/version_update_service.dart';
import '../../common/widgets/version_update_dialog.dart';
@ -128,6 +123,8 @@ class SettingsController extends GetxController {
final appVersion = ''.obs;
final buildNumber = ''.obs;
bool isCheckingUpdate = false; //状态锁,防止重复检查
// 权限相关
// 权限组,用于在UI中显示
final List<Map<String, dynamic>> permissionGroups = [
@ -482,6 +479,9 @@ class SettingsController extends GetxController {
/// 手动检查版本更新
Future<void> checkForUpdate() async {
if (isCheckingUpdate) return;
isCheckingUpdate = true;
try {
// 显示加载提示
Get.dialog(
@ -515,7 +515,7 @@ class SettingsController extends GetxController {
} catch (e) {
// 关闭加载提示
if (Get.isDialogOpen == true) {
Get.back();
Get.back(closeOverlays: true);
}
Get.snackbar(
@ -525,6 +525,8 @@ class SettingsController extends GetxController {
backgroundColor: Colors.red.withOpacity(0.8),
colorText: Colors.white,
);
} finally {
isCheckingUpdate = false;
}
}
}

Loading…
Cancel
Save