From ebd92c10118ffb716539fdaedd0a15a48e9e204e Mon Sep 17 00:00:00 2001 From: ashrafzarkanisala Date: Thu, 12 Sep 2024 13:49:40 +0300 Subject: [PATCH] push ceiling sensor batch --- .../helper/route_controls_based_code.dart | 12 +- .../ceiling_sensor/bloc/bloc.dart | 14 +++ .../ceiling_sensor/bloc/event.dart | 2 + .../view/ceiling_sensor_batch_control.dart | 119 ++++++++++++++++++ 4 files changed, 143 insertions(+), 4 deletions(-) create mode 100644 lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_batch_control.dart diff --git a/lib/pages/device_managment/all_devices/helper/route_controls_based_code.dart b/lib/pages/device_managment/all_devices/helper/route_controls_based_code.dart index 06ef58d5..9acce9f7 100644 --- a/lib/pages/device_managment/all_devices/helper/route_controls_based_code.dart +++ b/lib/pages/device_managment/all_devices/helper/route_controls_based_code.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:syncrow_web/pages/device_managment/ac/view/ac_device_batch_control.dart'; import 'package:syncrow_web/pages/device_managment/ac/view/ac_device_control.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart'; +import 'package:syncrow_web/pages/device_managment/ceiling_sensor/view/ceiling_sensor_batch_control.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/view/ceiling_sensor_controls.dart'; import 'package:syncrow_web/pages/device_managment/curtain/view/curtain_batch_status_view.dart'; import 'package:syncrow_web/pages/device_managment/curtain/view/curtain_status_view.dart'; @@ -91,10 +92,13 @@ mixin RouteControlsBasedCode { .where((e) => (e.productType == 'WPS')) .map((e) => e.uuid!) .toList()); - // case 'CPS': - // return CeilingSensorControls( - // device: device.first, - // ); + case 'CPS': + return CeilingSensorBatchControl( + devicesIds: devices + .where((e) => (e.productType == 'CPS')) + .map((e) => e.uuid!) + .toList(), + ); case 'CUR': return CurtainBatchStatusView( devicesIds: devices diff --git a/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart b/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart index 570c1e9c..055c21b1 100644 --- a/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart +++ b/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart @@ -14,6 +14,7 @@ class CeilingSensorBloc extends Bloc { CeilingSensorBloc({required this.deviceId}) : super(CeilingInitialState()) { on(_fetchCeilingSensorStatus); + on(_fetchCeilingSensorBatchControl); on(_changeValue); on(_getDeviceReports); on(_showDescription); @@ -128,4 +129,17 @@ class CeilingSensorBloc extends Bloc { BackToCeilingGridViewEvent event, Emitter emit) { emit(CeilingUpdateState(ceilingSensorModel: deviceStatus)); } + + FutureOr _fetchCeilingSensorBatchControl( + CeilingBatchControlEvent event, Emitter emit) async { + emit(CeilingLoadingInitialState()); + try { + var response = await DevicesManagementApi().getDeviceStatus(deviceId); + deviceStatus = CeilingSensorModel.fromJson(response.status); + emit(CeilingUpdateState(ceilingSensorModel: deviceStatus)); + } catch (e) { + emit(CeilingFailedState(error: e.toString())); + return; + } + } } diff --git a/lib/pages/device_managment/ceiling_sensor/bloc/event.dart b/lib/pages/device_managment/ceiling_sensor/bloc/event.dart index 31c5ab56..d445578e 100644 --- a/lib/pages/device_managment/ceiling_sensor/bloc/event.dart +++ b/lib/pages/device_managment/ceiling_sensor/bloc/event.dart @@ -9,6 +9,8 @@ abstract class CeilingSensorEvent extends Equatable { class CeilingInitialEvent extends CeilingSensorEvent {} +class CeilingBatchControlEvent extends CeilingSensorEvent {} + class CeilingChangeValueEvent extends CeilingSensorEvent { final dynamic value; final String code; diff --git a/lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_batch_control.dart b/lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_batch_control.dart new file mode 100644 index 00000000..ca52c148 --- /dev/null +++ b/lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_batch_control.dart @@ -0,0 +1,119 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/bloc.dart'; +import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/event.dart'; +import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/state.dart'; +import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart'; +import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart'; +import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart'; +import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_space_type.dart'; +import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_update_data.dart'; +import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presense_nobody_time.dart'; +import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart'; + +class CeilingSensorBatchControl extends StatelessWidget + with HelperResponsiveLayout { + const CeilingSensorBatchControl({super.key, required this.devicesIds}); + + final List devicesIds; + + @override + Widget build(BuildContext context) { + final isExtraLarge = isExtraLargeScreenSize(context); + final isLarge = isLargeScreenSize(context); + final isMedium = isMediumScreenSize(context); + return BlocProvider( + create: (context) => CeilingSensorBloc(deviceId: devicesIds.first) + ..add(CeilingBatchControlEvent()), + child: BlocBuilder( + builder: (context, state) { + if (state is CeilingLoadingInitialState || + state is CeilingReportsLoadingState) { + return const Center(child: CircularProgressIndicator()); + } else if (state is CeilingUpdateState) { + return _buildGridView(context, state.ceilingSensorModel, + isExtraLarge, isLarge, isMedium); + } else if (state is CeilingReportsFailedState) { + final model = context.read().deviceStatus; + return _buildGridView( + context, model, isExtraLarge, isLarge, isMedium); + } + return const Center(child: Text('Error fetching status')); + }, + ), + ); + } + + Widget _buildGridView(BuildContext context, CeilingSensorModel model, + bool isExtraLarge, bool isLarge, bool isMedium) { + return GridView( + padding: const EdgeInsets.symmetric(horizontal: 50), + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: isLarge || isExtraLarge + ? 3 + : isMedium + ? 2 + : 1, + mainAxisExtent: 140, + crossAxisSpacing: 12, + mainAxisSpacing: 12, + ), + children: [ + PresenceSpaceType( + description: 'Space Type', + value: model.spaceType, + action: (String value) => context.read().add( + CeilingChangeValueEvent( + code: 'scene', + value: value, + ), + ), + ), + PresenceUpdateData( + value: model.sensitivity.toDouble(), + title: 'Sensitivity:', + minValue: 1, + maxValue: 5, + steps: 1, + action: (int value) { + context.read().add( + CeilingChangeValueEvent( + code: 'sensitivity', + value: value, + ), + ); + }, + ), + PresenceUpdateData( + value: model.maxDistance.toDouble(), + title: 'Maximum Distance:', + minValue: 0, + maxValue: 500, + steps: 50, + description: 'm', + action: (int value) => context.read().add( + CeilingChangeValueEvent( + code: 'moving_max_dis', + value: value, + ), + ), + ), + PresenceNoBodyTime( + value: model.noBodyTime, + title: 'Nobody Time:', + description: '', + action: (String value) => context.read().add( + CeilingChangeValueEvent( + code: 'nobody_time', + value: value, + ), + ), + ), + FirmwareUpdateWidget(deviceId: devicesIds.first, version: 4), + FactoryResetWidget(deviceId: devicesIds.first), + ], + ); + } +}