starwork_flutter/lib/views/device/deviceSetting/device_setting_controller.dart
2025-09-19 15:05:08 +08:00

132 lines
3.8 KiB
Dart

import 'package:get/get.dart';
import 'package:get/get_rx/get_rx.dart';
import 'package:starcloud/entity/star_cloud_lock_list.dart';
import 'package:starcloud/net/entity/api_response.dart';
import 'package:starcloud/sdk/entity/entity_sender/enable_lock_settings.dart';
import 'package:starcloud/sdk/sdk_lock_operate_extension.dart';
import 'package:starcloud/sdk/sdk_lock_setting_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/constant/lock_function_number.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 DeviceSettingController extends BaseController {
// 锁信息
StarCloudLock? lockInfo;
// 锁名称
RxString lockName = ''.obs;
// 定义一个可观察的 Map
final lockFeatureMap = <String, dynamic>{}.obs;
final lockSettingMap = <String, dynamic>{}.obs;
final mainController = Get.find<MainController>();
@override
void onReady() {
super.onReady();
// 读取参数
final args = Get.arguments;
if (args != null && args.containsKey(AppViewParameterKeys.lockInfo)) {
final json = args[AppViewParameterKeys.lockInfo];
lockInfo = StarCloudLock.fromJson(json, 0);
lockName.value = lockInfo?.lockName ?? '';
}
_readLockSetting();
_readLockFeature();
}
// 开启/关闭远程开锁
void enableRemoteUnlock(bool value) async {
showLoading();
await StarCloudSDK.instance.enableLockSettings(
lockId: lockInfo?.lockId ?? 0,
lockSettings: EnableLockSettings(
featureBit: LockFunctionNumber.remoteUnlocking,
featureEnable: value,
parameter: null,
),
onSuccess: () {
_readLockSetting();
hideLoading();
},
onError: (err) {
AppLogger.error('开启/关闭远程开锁失败:${err}');
hideLoading();
},
);
}
void _readLockSetting() async {
showLoading();
await StarCloudSDK.instance.readLockSetting(
lockId: lockInfo?.lockId ?? 0,
onSuccess: (response) {
if (response is ApiResponse) {
final resultData = response as ApiResponse;
if (resultData.isSuccess) {
lockSettingMap.value = resultData.data['lockSetting'];
}
}
hideLoading();
},
onError: (err) {
AppLogger.error('读取锁设置失败:${err}');
hideLoading();
},
);
}
void _readLockFeature() async {
showLoading();
await StarCloudSDK.instance.readLockFeature(
lockId: lockInfo?.lockId ?? 0,
onSuccess: (response) {
if (response is ApiResponse) {
final resultData = response as ApiResponse;
if (resultData.isSuccess) {
lockFeatureMap.value = resultData.data['lockFeature'];
}
}
hideLoading();
},
onError: (err) {
AppLogger.error('读取锁设置失败:${err}');
hideLoading();
},
);
}
void removeDevice() async {
showLoading();
var teamInfo = mainController.selectedTeam.value;
var teamCloudInfo = teamInfo.teamCloudInfo;
if (teamCloudInfo == null) {
showToast('没找到对应的星云账户信息');
hideLoading();
return;
}
await StarCloudSDK.instance.resetLock(
lockId: lockInfo?.lockId ?? 0,
cloudUid: teamCloudInfo.uid,
onSuccess: () {
showSuccess();
EventBusUtil().instance.fire(RefreshDeviceListEvent());
Get.back();
},
onError: (err) {
hideLoading();
},
);
}
}