From c1463e0e278e1a830dbc8641aa3c319f38bbde60 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Fri, 19 Sep 2025 17:39:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E9=85=8D=E5=AF=B9=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=99=A8):=20=E6=B7=BB=E5=8A=A0=E5=8D=8E=E4=B8=BA=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E7=89=B9=E6=AE=8A=E5=A4=84=E7=90=86=EF=BC=9A=E5=8D=8E?= =?UTF-8?q?=E4=B8=BA=E8=AE=BE=E5=A4=87=E9=A6=96=E6=AC=A1=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E6=9D=83=E9=99=90=E8=A2=AB=E6=8B=92=E7=BB=9D=E5=90=8E=E7=BB=AD?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E8=A7=A6=E5=8F=91=E6=9D=83=E9=99=90=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=EF=BC=8C=E7=9B=B4=E6=8E=A5=E6=8F=90=E7=A4=BA=E6=89=8B?= =?UTF-8?q?=E5=8A=A8=E5=BC=80=E5=90=AF=E6=9D=83=E9=99=90=EF=BC=9B=20?= =?UTF-8?q?=E5=85=B6=E5=AE=83=E5=93=81=E7=89=8C=E8=AE=BE=E5=A4=87=E4=B8=8D?= =?UTF-8?q?=E5=8F=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/pairing_controller.dart | 44 ++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/lib/modules/pairing/controllers/pairing_controller.dart b/lib/modules/pairing/controllers/pairing_controller.dart index b3ff77b52..e1bd5f96d 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -1,20 +1,25 @@ +import 'dart:io'; +import 'dart:async'; + import 'package:app_settings/app_settings.dart'; import 'package:voitrans/data/models/appconfig_model.dart'; -import '/data/models/appconfig.dart'; -import '/data/models/user_Info.dart'; -import '/data/services/network/api.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; -import 'dart:async'; import 'package:permission_handler/permission_handler.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'package:get_storage/get_storage.dart'; +import 'package:device_info_plus/device_info_plus.dart'; + import '../../../routes/app_routes.dart'; import '../../../core/utils/logger.dart'; -import 'dart:io'; +import '/data/models/appconfig.dart'; +import '/data/models/user_Info.dart'; +import '/data/services/network/api.dart'; import '../../../data/services/bluetooth_manager.dart'; import '../../../data/services/ble_manager.dart'; import '../../../core/utils/permission_util.dart'; +import '../../../data/services/version_update_service.dart'; /// 配对状态枚举 - 简化版本 enum PairingState { @@ -48,6 +53,7 @@ enum ErrorType { class PairingController extends GetxController with WidgetsBindingObserver { static const String _tag = 'PairingCtrl'; static PairingController get to => Get.find(); + final _storage = GetStorage(); // ========== 状态管理 ========== final _currentState = PairingState.idle.obs; @@ -96,6 +102,12 @@ class PairingController extends GetxController with WidgetsBindingObserver { // Public getter for view access BluetoothDevice? get currentDevice => _currentClassicDevice; + //华为设备权限检查标记 + bool isHuaweiHasChecked = false; + // 缓存的设备品牌信息 + final versionService = Get.find(); + bool isHuaweiDevice = false; + @override void onInit() { super.onInit(); @@ -106,6 +118,8 @@ class PairingController extends GetxController with WidgetsBindingObserver { WidgetsBinding.instance.addObserver(this); Logger.i(_tag, '应用生命周期监听器注册完成'); + isHuaweiDevice = _isHuaweiDevice(); + // 确保服务已初始化 _bluetoothManager = Get.find(); _bleManager = Get.find(); @@ -113,6 +127,11 @@ class PairingController extends GetxController with WidgetsBindingObserver { // 集中设置所有监听器 _setupAllListeners(); + if (isHuaweiDevice) { + //检查华为设备是否检查权限检查过 + isHuaweiHasChecked = _storage.read('isHuaweiHasChecked') ?? false; + } + // 开始初始状态检查 // 延迟稍长时间,确保BluetoothManager有足够时间获取已连接设备 Future.delayed(const Duration(milliseconds: 300), () { @@ -548,8 +567,20 @@ class PairingController extends GetxController with WidgetsBindingObserver { return _bluetoothManager.bluetoothState != 'off'; } + /// 检查是否为华为设备 + bool _isHuaweiDevice() { + final deviceBrand = versionService.cachedDeviceBrand; + return deviceBrand.isNotEmpty && + (deviceBrand.contains('huawei') || deviceBrand.contains('华为')); + } + /// 检查权限 Future _checkPermissions() async { + //如果是华为设备,且已经检查过,直接返回false + if (isHuaweiDevice && isHuaweiHasChecked) { + return false; + } + // Android权限检查 if (Platform.isAndroid) { Logger.i(_tag, '开始检查Android权限'); @@ -575,6 +606,9 @@ class PairingController extends GetxController with WidgetsBindingObserver { permanentDenialText: 'locationPermanentDenial'.tr, ); + if (isHuaweiDevice) { + _storage.write('isHuaweiHasChecked', true); + } return bluetoothScanGranted && bluetoothConnectGranted && locationGranted; } return true;