mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-10 15:17:31 +00:00
Refactor presence update data handling for improved precision and scaling
This commit is contained in:
@ -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<String> 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<FlushMountedPresenceSensorBloc,
|
||||||
|
FlushMountedPresenceSensorState>(
|
||||||
|
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<FlushMountedPresenceSensorBloc>().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<FlushMountedPresenceSensorBloc>().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<FlushMountedPresenceSensorBloc>().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<FlushMountedPresenceSensorBloc>().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<FlushMountedPresenceSensorBloc>().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<FlushMountedPresenceSensorBloc>().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<FlushMountedPresenceSensorBloc>().add(
|
||||||
|
FlushMountedPresenceSensorChangeValueEvent(
|
||||||
|
code: FlushMountedPresenceSensorModel.codeNoneDelay,
|
||||||
|
value: (value * 10).round(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
FactoryResetWidget(
|
||||||
|
callFactoryReset: () {
|
||||||
|
context.read<FlushMountedPresenceSensorBloc>().add(
|
||||||
|
FlushMountedPresenceSensorFactoryResetEvent(
|
||||||
|
deviceId: devicesIds.first,
|
||||||
|
factoryReset: FactoryResetModel(devicesUuid: devicesIds),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -130,32 +130,36 @@ class FlushMountedPresenceSensorControlView extends StatelessWidget
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
PresenceUpdateData(
|
PresenceUpdateData(
|
||||||
value: (model.nearDetection).toDouble(),
|
value: (model.nearDetection / 100).toDouble(),
|
||||||
title: 'Nearest Detect Dist:',
|
title: 'Nearest Detect Dist:',
|
||||||
description: 'm',
|
description: 'm',
|
||||||
minValue: 0.0,
|
minValue: 0.0,
|
||||||
maxValue: 950,
|
maxValue: 9.5,
|
||||||
steps: 10,
|
steps: 0.1,
|
||||||
action: (int value) => context.read<FlushMountedPresenceSensorBloc>().add(
|
valuesPercision: 1,
|
||||||
FlushMountedPresenceSensorChangeValueEvent(
|
action: (double value) =>
|
||||||
code: FlushMountedPresenceSensorModel.codeNearDetection,
|
context.read<FlushMountedPresenceSensorBloc>().add(
|
||||||
value: (value).toInt(),
|
FlushMountedPresenceSensorChangeValueEvent(
|
||||||
),
|
code: FlushMountedPresenceSensorModel.codeNearDetection,
|
||||||
),
|
value: (value * 100).toInt(),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
PresenceUpdateData(
|
PresenceUpdateData(
|
||||||
value: (model.farDetection).toDouble(),
|
value: (model.farDetection / 100).toDouble(),
|
||||||
title: 'Max Detect Dist:',
|
title: 'Max Detect Dist:',
|
||||||
description: 'm',
|
description: 'm',
|
||||||
minValue: 0.0,
|
minValue: 0.0,
|
||||||
maxValue: 950,
|
maxValue: 9.5,
|
||||||
steps: 10,
|
steps: 0.1,
|
||||||
action: (int value) => context.read<FlushMountedPresenceSensorBloc>().add(
|
valuesPercision: 1,
|
||||||
FlushMountedPresenceSensorChangeValueEvent(
|
action: (double value) =>
|
||||||
code: FlushMountedPresenceSensorModel.codeFarDetection,
|
context.read<FlushMountedPresenceSensorBloc>().add(
|
||||||
value: (value).toInt(),
|
FlushMountedPresenceSensorChangeValueEvent(
|
||||||
),
|
code: FlushMountedPresenceSensorModel.codeFarDetection,
|
||||||
),
|
value: (value * 100).toInt(),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
PresenceUpdateData(
|
PresenceUpdateData(
|
||||||
value: (model.presenceDelay.toDouble()),
|
value: (model.presenceDelay.toDouble()),
|
||||||
@ -198,16 +202,16 @@ class FlushMountedPresenceSensorControlView extends StatelessWidget
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
PresenceUpdateData(
|
PresenceUpdateData(
|
||||||
value: ((model.noneDelay).toDouble()),
|
value: ((model.noneDelay / 10).toDouble()),
|
||||||
description: 's',
|
description: 's',
|
||||||
title: 'Disappe Delay:',
|
title: 'Disappe Delay:',
|
||||||
minValue: 0,
|
minValue: 20,
|
||||||
maxValue: 3000,
|
maxValue: 300,
|
||||||
steps: 10,
|
steps: 1,
|
||||||
action: (int value) => context.read<FlushMountedPresenceSensorBloc>().add(
|
action: (double value) => context.read<FlushMountedPresenceSensorBloc>().add(
|
||||||
FlushMountedPresenceSensorChangeValueEvent(
|
FlushMountedPresenceSensorChangeValueEvent(
|
||||||
code: FlushMountedPresenceSensorModel.codeNoneDelay,
|
code: FlushMountedPresenceSensorModel.codeNoneDelay,
|
||||||
value: value,
|
value: (value * 10).round(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -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/device_controls_container.dart';
|
||||||
import 'package:syncrow_web/pages/device_managment/shared/increament_decreament.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/color_manager.dart';
|
||||||
|
import 'package:syncrow_web/utils/extension/build_context_x.dart';
|
||||||
|
|
||||||
class PresenceUpdateData extends StatefulWidget {
|
class PresenceUpdateData extends StatefulWidget {
|
||||||
const PresenceUpdateData({
|
const PresenceUpdateData({
|
||||||
@ -64,8 +65,11 @@ class _CurrentTempState extends State<PresenceUpdateData> {
|
|||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
widget.title,
|
widget.title,
|
||||||
style: Theme.of(context).textTheme.bodySmall!.copyWith(
|
style: context.textTheme.bodySmall?.copyWith(
|
||||||
color: ColorsManager.blackColor, fontWeight: FontWeight.w400, fontSize: 10),
|
color: ColorsManager.blackColor,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
fontSize: 10,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
IncrementDecrementWidget(
|
IncrementDecrementWidget(
|
||||||
value: widget.value.toStringAsFixed(widget.valuesPercision),
|
value: widget.value.toStringAsFixed(widget.valuesPercision),
|
||||||
|
Reference in New Issue
Block a user