diff --git a/lib/pages/auth/bloc/auth_bloc.dart b/lib/pages/auth/bloc/auth_bloc.dart index a08cd0d3..ef433028 100644 --- a/lib/pages/auth/bloc/auth_bloc.dart +++ b/lib/pages/auth/bloc/auth_bloc.dart @@ -158,6 +158,7 @@ class AuthBloc extends Bloc { user = UserModel.fromToken(token); loginEmailController.clear(); loginPasswordController.clear(); + debugPrint("token " + token.accessToken); emit(LoginSuccess()); } else { emit(const LoginFailure(error: 'Something went wrong')); diff --git a/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart b/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart index fe928c94..570c1e9c 100644 --- a/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart +++ b/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart @@ -62,16 +62,19 @@ class CeilingSensorBloc extends Bloc { 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 emit, }) { if (_timer != null) { _timer!.cancel(); @@ -84,6 +87,11 @@ class CeilingSensorBloc extends Bloc { 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()); diff --git a/lib/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart b/lib/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart index 528de1e6..a79cbc19 100644 --- a/lib/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart +++ b/lib/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart @@ -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; + } +} diff --git a/lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_controls.dart b/lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_controls.dart index 4c00dd69..bf24ae0f 100644 --- a/lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_controls.dart +++ b/lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_controls.dart @@ -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().add( + CeilingChangeValueEvent( + code: 'scene', + value: value, + ), + ), ), PresenceUpdateData( value: model.sensitivity.toDouble(), diff --git a/lib/pages/device_managment/shared/sensors_widgets/presence_space_type.dart b/lib/pages/device_managment/shared/sensors_widgets/presence_space_type.dart index 5b14452a..2f593abe 100644 --- a/lib/pages/device_managment/shared/sensors_widgets/presence_space_type.dart +++ b/lib/pages/device_managment/shared/sensors_widgets/presence_space_type.dart @@ -1,24 +1,33 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart'; import 'package:syncrow_web/utils/color_manager.dart'; +import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart'; class PresenceSpaceType extends StatelessWidget { const PresenceSpaceType({ super.key, - required this.listOfIcons, required this.description, required this.value, + required this.action, }); - final List listOfIcons; final String description; - final String value; + final SpaceTypes value; + final void Function(String value) action; @override Widget build(BuildContext context) { + final Map spaceTypeIcons = { + SpaceTypes.none: Assets.office, + SpaceTypes.parlour: Assets.parlour, + SpaceTypes.area: Assets.dyi, + SpaceTypes.toilet: Assets.bathroom, + SpaceTypes.bedroom: Assets.bedroom, + }; + return DeviceControlsContainer( child: Column( mainAxisSize: MainAxisSize.min, @@ -38,23 +47,28 @@ class PresenceSpaceType extends StatelessWidget { Wrap( runSpacing: 8, spacing: 16, - children: [ - ...listOfIcons.map((icon) => Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(100), - border: Border.all( - color: icon.contains(value) - ? ColorsManager.blueColor - : Colors.transparent, - ), + children: spaceTypeIcons.entries.map((entry) { + final icon = entry.value; + final spaceType = entry.key; + return GestureDetector( + onTap: () => action(spaceType.name), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100), + border: Border.all( + color: value == spaceType + ? ColorsManager.blueColor + : Colors.transparent, ), - child: SvgPicture.asset( - icon, - width: 40, - height: 40, - ), - )), - ], + ), + child: SvgPicture.asset( + icon, + width: 40, + height: 40, + ), + ), + ); + }).toList(), ), ], ),