105 lines
3.1 KiB
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();
|
|
}
|
|
}
|