You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.4 KiB

import 'dart:ffi';
import 'package:voitrans/data/models/appconfig_model.dart';
import '/core/utils/logger.dart';
import '/data/models/user_Info.dart';
import '/data/services/ble_manager.dart';
import '/data/services/network/api.dart';
import '/routes/app_routes.dart';
import 'package:get/get.dart';
/*
设备管理
*/
class DevicesController extends GetxController {
late final BleManager _bleManager;
// 修改为响应式变量
final RxMap<int, List<UserDevice>> devices = <int, List<UserDevice>>{}.obs;
// 或者使用这种方式
// final Rx<Map<int, List<UserDevice>>> devices = Rx<Map<int, List<UserDevice>>>({});
@override
void onInit() {
super.onInit();
_bleManager = Get.find<BleManager>();
// 在初始化时加载设备数据
_loadDevices();
}
// 加载设备数据
void _loadDevices() async {
devices.clear();
final response = await Api.getdevices();
if (response != null) {
var devices = (response['devices'] as List<dynamic>)
.map((e) => UserDevice.fromJson(e as Map<String, dynamic>))
.toList();
User.instance.devices = devices;
}
for (var device in User.instance.devices) {
if (!devices.containsKey(device.devicetype)) {
devices[device.devicetype] = [];
}
devices[device.devicetype]!.add(device);
}
}
@override
void onClose() {
super.onClose();
// onClose 中不应该修改数据,这里应该是清理资源
}
void unbindearphone(UserDevice device) async {
final response = await Api.unbinddevice({
"id": device.id,
});
if (response != null) {
// 响应式更新
devices[device.devicetype]?.remove(device);
devices.refresh(); // 触发UI更新
if (device.devicemac == _bleManager.deviceInfo.value?.address) {
User.instance.removeUserDevice(device.id);
_bleManager.clearPairedDevices();
_bleManager.disconnect();
await Future.delayed(const Duration(seconds: 1));
Get.toNamed(Routes.pairing);
}
return;
} else {
return;
}
}
// 添加设备
void addDevice(UserDevice device) {
if (!devices.containsKey(device.devicetype)) {
devices[device.devicetype] = [];
}
devices[device.devicetype]!.add(device);
devices.refresh(); // 触发UI更新
}
// 获取指定类型的设备列表
List<UserDevice> getDevicesByType(int deviceType) {
return devices[deviceType] ?? [];
}
}