Refactor FlushMountedPresenceSensorBloc to streamline device control logic and remove redundant code

This commit is contained in:
Faris Armoush
2025-04-23 10:44:11 +03:00
parent 42d6b64e58
commit 91f93d4395

View File

@ -1,5 +1,4 @@
import 'dart:async'; import 'dart:async';
import 'dart:developer';
import 'package:bloc/bloc.dart'; import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
@ -110,41 +109,16 @@ class FlushMountedPresenceSensorBloc
Emitter<FlushMountedPresenceSensorState> emit, Emitter<FlushMountedPresenceSensorState> emit,
) async { ) async {
emit(FlushMountedPresenceSensorLoadingNewSate(model: deviceStatus)); emit(FlushMountedPresenceSensorLoadingNewSate(model: deviceStatus));
switch (event.code) { _updateDeviceFunctionFromCode(event.code, event.value);
case FlushMountedPresenceSensorModel.codeFarDetection:
deviceStatus.farDetection = event.value;
break;
case FlushMountedPresenceSensorModel.codeSensitivity:
log('updated sensitivity: ${deviceStatus.sensitivity}-${event.value}');
deviceStatus.sensitivity = event.value;
break;
case FlushMountedPresenceSensorModel.codeNoneDelay:
log('updated none delay: ${deviceStatus.noneDelay}-${event.value}');
deviceStatus.noneDelay = event.value;
break;
case FlushMountedPresenceSensorModel.codePresenceDelay:
deviceStatus.presenceDelay = event.value;
break;
case FlushMountedPresenceSensorModel.codeNearDetection:
deviceStatus.nearDetection = event.value;
break;
case FlushMountedPresenceSensorModel.codeOccurDistReduce:
deviceStatus.occurDistReduce = event.value;
break;
case FlushMountedPresenceSensorModel.codeSensiReduce:
deviceStatus.sensiReduce = event.value;
break;
default:
break;
}
emit(FlushMountedPresenceSensorUpdateState(model: deviceStatus)); emit(FlushMountedPresenceSensorUpdateState(model: deviceStatus));
await _controlDevice( try {
deviceId: deviceId, await controlDeviceService.controlDevice(
code: event.code, deviceUuid: deviceId,
value: event.value, status: Status(code: event.code, value: event.value),
isBatch: false, );
emit: emit, } catch (_) {
); await _reloadDeviceStatus();
}
} }
Future<void> _onFlushMountedPresenceSensorBatchControlEvent( Future<void> _onFlushMountedPresenceSensorBatchControlEvent(
@ -152,67 +126,54 @@ class FlushMountedPresenceSensorBloc
Emitter<FlushMountedPresenceSensorState> emit, Emitter<FlushMountedPresenceSensorState> emit,
) async { ) async {
emit(FlushMountedPresenceSensorLoadingNewSate(model: deviceStatus)); emit(FlushMountedPresenceSensorLoadingNewSate(model: deviceStatus));
switch (event.code) { _updateDeviceFunctionFromCode(event.code, event.value);
case FlushMountedPresenceSensorModel.codeFarDetection:
deviceStatus.farDetection = event.value;
break;
case FlushMountedPresenceSensorModel.codeSensitivity:
deviceStatus.sensitivity = event.value;
break;
case FlushMountedPresenceSensorModel.codeNoneDelay:
deviceStatus.noneDelay = event.value;
break;
case FlushMountedPresenceSensorModel.codePresenceDelay:
deviceStatus.presenceDelay = event.value;
break;
case FlushMountedPresenceSensorModel.codeNearDetection:
deviceStatus.nearDetection = event.value;
break;
case FlushMountedPresenceSensorModel.codeOccurDistReduce:
deviceStatus.occurDistReduce = event.value;
break;
case FlushMountedPresenceSensorModel.codeSensiReduce:
deviceStatus.sensiReduce = event.value;
break;
default:
break;
}
emit(FlushMountedPresenceSensorUpdateState(model: deviceStatus)); emit(FlushMountedPresenceSensorUpdateState(model: deviceStatus));
await _controlDevice(
deviceId: event.deviceIds, try {
code: event.code, await batchControlDevicesService.batchControlDevices(
value: event.value, uuids: event.deviceIds,
emit: emit, code: event.code,
isBatch: true, value: event.value,
); );
} catch (_) {
await _reloadDeviceStatus();
}
} }
Future<void> _controlDevice({ void _updateDeviceFunctionFromCode(String code, int value) {
required dynamic deviceId, switch (code) {
required String code, case FlushMountedPresenceSensorModel.codeFarDetection:
required dynamic value, deviceStatus.farDetection = value;
required Emitter<FlushMountedPresenceSensorState> emit, break;
required bool isBatch, case FlushMountedPresenceSensorModel.codeSensitivity:
}) async { deviceStatus.sensitivity = value;
try { break;
if (isBatch) { case FlushMountedPresenceSensorModel.codeNoneDelay:
await batchControlDevicesService.batchControlDevices( deviceStatus.noneDelay = value;
uuids: deviceId, break;
code: code, case FlushMountedPresenceSensorModel.codePresenceDelay:
value: value, deviceStatus.presenceDelay = value;
); break;
} else { case FlushMountedPresenceSensorModel.codeNearDetection:
await controlDeviceService.controlDevice( deviceStatus.nearDetection = value;
deviceUuid: deviceId, break;
status: Status(code: code, value: value), case FlushMountedPresenceSensorModel.codeOccurDistReduce:
); deviceStatus.occurDistReduce = value;
} break;
} catch (_) { case FlushMountedPresenceSensorModel.codeSensiReduce:
await Future.delayed(const Duration(milliseconds: 500)); deviceStatus.sensiReduce = value;
add(FlushMountedPresenceSensorFetchStatusEvent()); break;
default:
return;
} }
} }
Future<void> _reloadDeviceStatus() async {
await Future.delayed(const Duration(milliseconds: 500), () {
add(FlushMountedPresenceSensorFetchStatusEvent());
});
}
Future<void> _onFlushMountedPresenceSensorGetDeviceReportsEvent( Future<void> _onFlushMountedPresenceSensorGetDeviceReportsEvent(
FlushMountedPresenceSensorGetDeviceReportsEvent event, FlushMountedPresenceSensorGetDeviceReportsEvent event,
Emitter<FlushMountedPresenceSensorState> emit, Emitter<FlushMountedPresenceSensorState> emit,