push curtain batch control

This commit is contained in:
ashrafzarkanisala
2024-09-18 15:08:43 +03:00
parent 6d805ddfd7
commit 619d964cd7
6 changed files with 77 additions and 22 deletions

View File

@ -14,6 +14,7 @@ class CurtainBloc extends Bloc<CurtainEvent, CurtainState> {
on<CurtainFetchDeviceStatus>(_onFetchDeviceStatus);
on<CurtainFetchBatchStatus>(_onFetchBatchStatus);
on<CurtainControl>(_onCurtainControl);
on<CurtainBatchControl>(_onCurtainBatchControl);
}
FutureOr<void> _onFetchDeviceStatus(
@ -45,16 +46,26 @@ class CurtainBloc extends Bloc<CurtainEvent, CurtainState> {
value: event.value,
oldValue: oldValue,
emit: emit,
isBatch: false,
);
}
Future<void> _runDebounce({
required String deviceId,
required dynamic deviceId,
required String code,
required bool value,
required bool oldValue,
required Emitter<CurtainState> emit,
required bool isBatch,
}) async {
late String id;
if (deviceId is List) {
id = deviceId.first;
} else {
id = deviceId;
}
if (_timer != null) {
_timer!.cancel();
}
@ -62,14 +73,20 @@ class CurtainBloc extends Bloc<CurtainEvent, CurtainState> {
try {
final controlValue = value ? 'open' : 'close';
final response = await DevicesManagementApi()
.deviceControl(deviceId, Status(code: code, value: controlValue));
late bool response;
if (isBatch) {
response = await DevicesManagementApi()
.deviceBatchControl(deviceId, code, controlValue);
} else {
response = await DevicesManagementApi()
.deviceControl(deviceId, Status(code: code, value: controlValue));
}
if (!response) {
_revertValueAndEmit(deviceId, oldValue, emit);
_revertValueAndEmit(id, oldValue, emit);
}
} catch (e) {
_revertValueAndEmit(deviceId, oldValue, emit);
_revertValueAndEmit(id, oldValue, emit);
}
});
}
@ -95,7 +112,7 @@ class CurtainBloc extends Bloc<CurtainEvent, CurtainState> {
emit(CurtainStatusLoading());
try {
final status =
await DevicesManagementApi().getDeviceStatus(event.deviceId);
await DevicesManagementApi().getBatchStatus(event.devicesIds);
deviceStatus = _checkStatus(status.status[0].value);
@ -104,4 +121,22 @@ class CurtainBloc extends Bloc<CurtainEvent, CurtainState> {
emit(CurtainError(e.toString()));
}
}
FutureOr<void> _onCurtainBatchControl(
CurtainBatchControl event, Emitter<CurtainState> emit) async {
final oldValue = deviceStatus;
_updateLocalValue(event.value, emit);
emit(CurtainStatusLoaded(deviceStatus));
await _runDebounce(
deviceId: event.devicesIds,
code: event.code,
value: event.value,
oldValue: oldValue,
emit: emit,
isBatch: true,
);
}
}