starwork_flutter/lib/views/device/removeDevice/remove_device_controller.dart

105 lines
3.1 KiB
Dart

import 'package:get/get.dart';
import 'package:starcloud/entity/star_cloud_lock_list.dart';
import 'package:starcloud/sdk/sdk_lock_operate_extension.dart';
import 'package:starcloud/sdk/starcloud.dart';
import 'package:starwork_flutter/base/app_logger.dart';
import 'package:starwork_flutter/base/base_controller.dart';
import 'package:starwork_flutter/common/constant/app_view_parameter_keys.dart';
import 'package:starwork_flutter/common/events/refresh_device_list_event.dart';
import 'package:starwork_flutter/common/utils/event_bus_util.dart';
import 'package:starwork_flutter/views/main/main_controller.dart';
class RemoveDeviceController extends BaseController {
// 选中的设备
RxList<StarCloudLock> selectedDevices = <StarCloudLock>[].obs;
RxList<StarCloudLock> deviceList = <StarCloudLock>[].obs;
final mainController = Get.find<MainController>();
final currentProgress = ''.obs; // 显示进度文本,如 "正在重置设备 1/3"
@override
void onInit() {
deviceList.value = (Get.arguments?[AppViewParameterKeys.deviceList] as List<StarCloudLock>?) ?? [];
super.onInit();
}
// 判断某个设备是否被选中
bool isSelected(StarCloudLock device) {
AppLogger.highlight('${selectedDevices.contains(device)}');
return selectedDevices.contains(device);
}
// 切换选中状态
void toggleDevice(StarCloudLock device) {
if (isSelected(device)) {
selectedDevices.remove(device);
} else {
selectedDevices.add(device);
}
}
// 全选
void selectAll(List<StarCloudLock> allDevices) {
selectedDevices.assignAll(allDevices);
}
// 清空选择
void clearSelection() {
selectedDevices.clear();
}
// 是否全选
bool isAllSelected(List<StarCloudLock> allDevices) {
return allDevices.isNotEmpty && selectedDevices.length == allDevices.length;
}
// 删除设备
void removeDevice(RxList<StarCloudLock> selectedDevices) async {
showLoading();
var teamInfo = mainController.selectedTeam.value;
var teamCloudInfo = teamInfo.teamCloudInfo;
if (teamCloudInfo == null) {
showToast('没找到对应的星云账户信息');
hideLoading();
return;
}
if (selectedDevices.isEmpty) {
showToast('没有选择要重置的设备');
hideLoading();
return;
}
bool allSuccess = true; // 标记是否全部成功
for (int i = 0; i < selectedDevices.length; i++) {
final device = selectedDevices[i];
try {
await StarCloudSDK.instance.resetLock(
lockId: device.lockId,
cloudUid: teamCloudInfo.uid,
onSuccess: () {
// 可以在这里做点成功反馈(如打印日志)
},
onError: (err) {
allSuccess = false; // 标记为非全成功
},
);
} catch (e) {
allSuccess = false;
}
}
// === 所有设备处理完成后判断 ===
if (allSuccess) {
Future.delayed(1.seconds, () {
EventBusUtil().instance.fire(RefreshDeviceListEvent());
Get.back();
});
} else {
Future.delayed(2.seconds, () {});
}
hideLoading();
}
}