space type connection

This commit is contained in:
ashrafzarkanisala
2024-09-02 22:36:11 +03:00
parent 3017a5d1f6
commit 2339417c8c
5 changed files with 77 additions and 31 deletions

View File

@ -62,16 +62,19 @@ class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> {
deviceStatus.noBodyTime = event.value;
} else if (event.code == 'moving_max_dis') {
deviceStatus.maxDistance = event.value;
} else if (event.code == 'scene') {
deviceStatus.spaceType = getSpaceType(event.value);
}
emit(CeilingUpdateState(ceilingSensorModel: deviceStatus));
await _runDeBouncer(
deviceId: deviceId, code: event.code, value: event.value);
deviceId: deviceId, code: event.code, value: event.value, emit: emit);
}
_runDeBouncer({
required String deviceId,
required String code,
required dynamic value,
required Emitter<CeilingSensorState> emit,
}) {
if (_timer != null) {
_timer!.cancel();
@ -84,6 +87,11 @@ class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> {
if (!response) {
add(CeilingInitialEvent());
}
if (response == true && code == 'scene') {
emit(CeilingLoadingInitialState());
await Future.delayed(const Duration(seconds: 1));
add(CeilingInitialEvent());
}
} catch (_) {
await Future.delayed(const Duration(milliseconds: 500));
add(CeilingInitialEvent());

View File

@ -10,7 +10,7 @@ class CeilingSensorModel {
String bodyMovement;
String noBodyTime;
int maxDistance;
String spaceType;
SpaceTypes spaceType;
CeilingSensorModel({
required this.presenceState,
@ -33,7 +33,7 @@ class CeilingSensorModel {
String _bodyMovement = 'none';
String _noBodyTime = 'none';
int _maxDis = 0;
String _spaceType = 'none';
SpaceTypes _spaceType = SpaceTypes.none;
try {
for (var status in jsonList) {
@ -42,7 +42,7 @@ class CeilingSensorModel {
_presenceState = status.value ?? 'none';
break;
case 'scene':
_spaceType = status.value ?? 'none';
_spaceType = getSpaceType(status.value ?? 'none');
break;
case 'sensitivity':
_sensitivity = status.value is int
@ -92,3 +92,27 @@ class CeilingSensorModel {
);
}
}
enum SpaceTypes {
none,
parlour,
area,
toilet,
bedroom,
}
SpaceTypes getSpaceType(String value) {
switch (value) {
case 'parlour':
return SpaceTypes.parlour;
case 'area':
return SpaceTypes.area;
case 'toilet':
return SpaceTypes.toilet;
case 'bedroom':
return SpaceTypes.bedroom;
case 'none':
default:
return SpaceTypes.none;
}
}

View File

@ -99,15 +99,14 @@ class CeilingSensorControls extends StatelessWidget
description: 'Detection Range',
),
PresenceSpaceType(
listOfIcons: const [
Assets.office,
Assets.parlour,
Assets.dyi,
Assets.bathroom,
Assets.bedroom,
],
description: 'Space Type',
value: model.spaceType,
action: (String value) => context.read<CeilingSensorBloc>().add(
CeilingChangeValueEvent(
code: 'scene',
value: value,
),
),
),
PresenceUpdateData(
value: model.sensitivity.toDouble(),