diff --git a/lib/pages/device_managment/flush_mounted_presence_sensor/views/flush_mounted_presence_sensor_batch_control_view.dart b/lib/pages/device_managment/flush_mounted_presence_sensor/views/flush_mounted_presence_sensor_batch_control_view.dart new file mode 100644 index 00000000..0ef4cdbc --- /dev/null +++ b/lib/pages/device_managment/flush_mounted_presence_sensor/views/flush_mounted_presence_sensor_batch_control_view.dart @@ -0,0 +1,187 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; +import 'package:syncrow_web/pages/device_managment/flush_mounted_presence_sensor/bloc/flush_mounted_presence_sensor_bloc.dart'; +import 'package:syncrow_web/pages/device_managment/flush_mounted_presence_sensor/models/flush_mounted_presence_sensor_model.dart'; +import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart'; +import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_update_data.dart'; +import 'package:syncrow_web/services/batch_control_devices_service.dart'; +import 'package:syncrow_web/services/control_device_service.dart'; +import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart'; + +class FlushMountedPresenceSensorBatchControlView extends StatelessWidget + with HelperResponsiveLayout { + const FlushMountedPresenceSensorBatchControlView({ + required this.devicesIds, + super.key, + }); + + final List devicesIds; + + @override + Widget build(BuildContext context) { + final isExtraLarge = isExtraLargeScreenSize(context); + final isLarge = isLargeScreenSize(context); + final isMedium = isMediumScreenSize(context); + return BlocProvider( + create: (context) => FlushMountedPresenceSensorBloc( + deviceId: devicesIds.first, + controlDeviceService: DebouncedControlDeviceService( + decoratee: RemoteControlDeviceService(), + ), + batchControlDevicesService: DebouncedBatchControlDevicesService( + decoratee: RemoteBatchControlDevicesService(), + ), + )..add(FlushMountedPresenceSensorFetchStatusEvent()), + child: BlocBuilder( + builder: (context, state) { + if (state is FlushMountedPresenceSensorLoadingInitialState || + state is FlushMountedPresenceSensorDeviceReportsLoadingState) { + return const Center(child: CircularProgressIndicator()); + } else if (state is FlushMountedPresenceSensorUpdateState) { + return _buildGridView( + context, state.model, isExtraLarge, isLarge, isMedium); + } + return const Center(child: Text('Error fetching status')); + }, + ), + ); + } + + Widget _buildGridView( + BuildContext context, + FlushMountedPresenceSensorModel 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: [ + PresenceUpdateData( + value: model.sensitivity.toDouble(), + title: 'Sensitivity:', + minValue: 0, + maxValue: 9, + steps: 1, + action: (int value) => context.read().add( + FlushMountedPresenceSensorChangeValueEvent( + code: FlushMountedPresenceSensorModel.codeSensitivity, + value: value, + ), + ), + ), + PresenceUpdateData( + value: (model.nearDetection / 100).toDouble(), + title: 'Nearest Detect Dist:', + description: 'm', + minValue: 0.0, + maxValue: 9.5, + steps: 0.1, + valuesPercision: 1, + action: (double value) => + context.read().add( + FlushMountedPresenceSensorChangeValueEvent( + code: FlushMountedPresenceSensorModel.codeNearDetection, + value: (value * 100).toInt(), + ), + ), + ), + PresenceUpdateData( + value: (model.farDetection / 100).toDouble(), + title: 'Max Detect Dist:', + description: 'm', + minValue: 0.0, + maxValue: 9.5, + steps: 0.1, + valuesPercision: 1, + action: (double value) => + context.read().add( + FlushMountedPresenceSensorChangeValueEvent( + code: FlushMountedPresenceSensorModel.codeFarDetection, + value: (value * 100).toInt(), + ), + ), + ), + PresenceUpdateData( + value: model.presenceDelay.toDouble(), + title: 'Trigger Level:', + minValue: 0, + maxValue: 3, + steps: 1, + action: (int value) => context.read().add( + FlushMountedPresenceSensorChangeValueEvent( + code: FlushMountedPresenceSensorModel.codePresenceDelay, + value: value, + ), + ), + ), + PresenceUpdateData( + value: (model.occurDistReduce.toDouble()), + title: 'Indent Level:', + minValue: 0, + maxValue: 3, + steps: 1, + action: (int value) => context.read().add( + FlushMountedPresenceSensorChangeValueEvent( + code: FlushMountedPresenceSensorModel.codeOccurDistReduce, + value: value, + ), + ), + ), + PresenceUpdateData( + value: (model.sensiReduce.toDouble()), + title: 'Target Confirm Time:', + description: 's', + minValue: 0, + maxValue: 3, + steps: 1, + action: (int value) => context.read().add( + FlushMountedPresenceSensorChangeValueEvent( + code: FlushMountedPresenceSensorModel.codeSensiReduce, + value: value, + ), + ), + ), + PresenceUpdateData( + value: ((model.noneDelay / 10).toDouble()), + description: 's', + title: 'Disappe Delay:', + minValue: 20, + maxValue: 300, + steps: 1, + action: (double value) => + context.read().add( + FlushMountedPresenceSensorChangeValueEvent( + code: FlushMountedPresenceSensorModel.codeNoneDelay, + value: (value * 10).round(), + ), + ), + ), + FactoryResetWidget( + callFactoryReset: () { + context.read().add( + FlushMountedPresenceSensorFactoryResetEvent( + deviceId: devicesIds.first, + factoryReset: FactoryResetModel(devicesUuid: devicesIds), + ), + ); + }, + ), + ], + ); + } +} diff --git a/lib/pages/device_managment/flush_mounted_presence_sensor/views/flush_mounted_presence_sensor_control_view.dart b/lib/pages/device_managment/flush_mounted_presence_sensor/views/flush_mounted_presence_sensor_control_view.dart index c02b4141..dab887b2 100644 --- a/lib/pages/device_managment/flush_mounted_presence_sensor/views/flush_mounted_presence_sensor_control_view.dart +++ b/lib/pages/device_managment/flush_mounted_presence_sensor/views/flush_mounted_presence_sensor_control_view.dart @@ -130,32 +130,36 @@ class FlushMountedPresenceSensorControlView extends StatelessWidget ), ), PresenceUpdateData( - value: (model.nearDetection).toDouble(), + value: (model.nearDetection / 100).toDouble(), title: 'Nearest Detect Dist:', description: 'm', minValue: 0.0, - maxValue: 950, - steps: 10, - action: (int value) => context.read().add( - FlushMountedPresenceSensorChangeValueEvent( - code: FlushMountedPresenceSensorModel.codeNearDetection, - value: (value).toInt(), - ), - ), + maxValue: 9.5, + steps: 0.1, + valuesPercision: 1, + action: (double value) => + context.read().add( + FlushMountedPresenceSensorChangeValueEvent( + code: FlushMountedPresenceSensorModel.codeNearDetection, + value: (value * 100).toInt(), + ), + ), ), PresenceUpdateData( - value: (model.farDetection).toDouble(), + value: (model.farDetection / 100).toDouble(), title: 'Max Detect Dist:', description: 'm', minValue: 0.0, - maxValue: 950, - steps: 10, - action: (int value) => context.read().add( - FlushMountedPresenceSensorChangeValueEvent( - code: FlushMountedPresenceSensorModel.codeFarDetection, - value: (value).toInt(), - ), - ), + maxValue: 9.5, + steps: 0.1, + valuesPercision: 1, + action: (double value) => + context.read().add( + FlushMountedPresenceSensorChangeValueEvent( + code: FlushMountedPresenceSensorModel.codeFarDetection, + value: (value * 100).toInt(), + ), + ), ), PresenceUpdateData( value: (model.presenceDelay.toDouble()), @@ -198,16 +202,16 @@ class FlushMountedPresenceSensorControlView extends StatelessWidget ), ), PresenceUpdateData( - value: ((model.noneDelay).toDouble()), + value: ((model.noneDelay / 10).toDouble()), description: 's', title: 'Disappe Delay:', - minValue: 0, - maxValue: 3000, - steps: 10, - action: (int value) => context.read().add( + minValue: 20, + maxValue: 300, + steps: 1, + action: (double value) => context.read().add( FlushMountedPresenceSensorChangeValueEvent( code: FlushMountedPresenceSensorModel.codeNoneDelay, - value: value, + value: (value * 10).round(), ), ), ), diff --git a/lib/pages/device_managment/shared/sensors_widgets/presence_update_data.dart b/lib/pages/device_managment/shared/sensors_widgets/presence_update_data.dart index 4b4d5562..e535612d 100644 --- a/lib/pages/device_managment/shared/sensors_widgets/presence_update_data.dart +++ b/lib/pages/device_managment/shared/sensors_widgets/presence_update_data.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart'; import 'package:syncrow_web/pages/device_managment/shared/increament_decreament.dart'; import 'package:syncrow_web/utils/color_manager.dart'; +import 'package:syncrow_web/utils/extension/build_context_x.dart'; class PresenceUpdateData extends StatefulWidget { const PresenceUpdateData({ @@ -64,8 +65,11 @@ class _CurrentTempState extends State { children: [ Text( widget.title, - style: Theme.of(context).textTheme.bodySmall!.copyWith( - color: ColorsManager.blackColor, fontWeight: FontWeight.w400, fontSize: 10), + style: context.textTheme.bodySmall?.copyWith( + color: ColorsManager.blackColor, + fontWeight: FontWeight.w400, + fontSize: 10, + ), ), IncrementDecrementWidget( value: widget.value.toStringAsFixed(widget.valuesPercision),