Refactor FlushMountedPresenceSensorBloc creation to use factory method and streamline dependency injection

This commit is contained in:
Faris Armoush
2025-04-23 12:15:50 +03:00
parent 4a5176cf22
commit 86164e746a
3 changed files with 44 additions and 50 deletions

View File

@ -0,0 +1,21 @@
import 'package:syncrow_web/pages/device_managment/flush_mounted_presence_sensor/bloc/flush_mounted_presence_sensor_bloc.dart';
import 'package:syncrow_web/services/batch_control_devices_service.dart';
import 'package:syncrow_web/services/control_device_service.dart';
abstract final class FlushMountedPresenceSensorBlocFactory {
const FlushMountedPresenceSensorBlocFactory._();
static FlushMountedPresenceSensorBloc create({
required String deviceId,
}) {
return FlushMountedPresenceSensorBloc(
deviceId: '',
controlDeviceService: DebouncedControlDeviceService(
decoratee: RemoteControlDeviceService(),
),
batchControlDevicesService: DebouncedBatchControlDevicesService(
decoratee: RemoteBatchControlDevicesService(),
),
)..add(FlushMountedPresenceSensorFetchStatusEvent());
}
}

View File

@ -2,11 +2,10 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.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/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/bloc/flush_mounted_presence_sensor_bloc.dart';
import 'package:syncrow_web/pages/device_managment/flush_mounted_presence_sensor/factories/flush_mounted_presence_sensor_bloc_factory.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/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/batch_control/factory_reset.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/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'; import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
class FlushMountedPresenceSensorBatchControlView extends StatelessWidget class FlushMountedPresenceSensorBatchControlView extends StatelessWidget
@ -20,19 +19,10 @@ class FlushMountedPresenceSensorBatchControlView extends StatelessWidget
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isExtraLarge = isExtraLargeScreenSize(context);
final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context);
return BlocProvider( return BlocProvider(
create: (context) => FlushMountedPresenceSensorBloc( create: (context) => FlushMountedPresenceSensorBlocFactory.create(
deviceId: devicesIds.first, deviceId: devicesIds.first,
controlDeviceService: DebouncedControlDeviceService( ),
decoratee: RemoteControlDeviceService(),
),
batchControlDevicesService: DebouncedBatchControlDevicesService(
decoratee: RemoteBatchControlDevicesService(),
),
)..add(FlushMountedPresenceSensorFetchStatusEvent()),
child: BlocBuilder<FlushMountedPresenceSensorBloc, child: BlocBuilder<FlushMountedPresenceSensorBloc,
FlushMountedPresenceSensorState>( FlushMountedPresenceSensorState>(
builder: (context, state) { builder: (context, state) {
@ -40,8 +30,7 @@ class FlushMountedPresenceSensorBatchControlView extends StatelessWidget
state is FlushMountedPresenceSensorDeviceReportsLoadingState) { state is FlushMountedPresenceSensorDeviceReportsLoadingState) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else if (state is FlushMountedPresenceSensorUpdateState) { } else if (state is FlushMountedPresenceSensorUpdateState) {
return _buildGridView( return _buildGridView(context, state.model);
context, state.model, isExtraLarge, isLarge, isMedium);
} }
return const Center(child: Text('Error fetching status')); return const Center(child: Text('Error fetching status'));
}, },
@ -52,10 +41,10 @@ class FlushMountedPresenceSensorBatchControlView extends StatelessWidget
Widget _buildGridView( Widget _buildGridView(
BuildContext context, BuildContext context,
FlushMountedPresenceSensorModel model, FlushMountedPresenceSensorModel model,
bool isExtraLarge,
bool isLarge,
bool isMedium,
) { ) {
final isExtraLarge = isExtraLargeScreenSize(context);
final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context);
return GridView( return GridView(
padding: const EdgeInsets.symmetric(horizontal: 50), padding: const EdgeInsets.symmetric(horizontal: 50),
shrinkWrap: true, shrinkWrap: true,

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_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/bloc/flush_mounted_presence_sensor_bloc.dart';
import 'package:syncrow_web/pages/device_managment/flush_mounted_presence_sensor/factories/flush_mounted_presence_sensor_bloc_factory.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/flush_mounted_presence_sensor/models/flush_mounted_presence_sensor_model.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_display_data.dart'; import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_display_data.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_static_widget.dart'; import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_static_widget.dart';
@ -9,8 +10,6 @@ import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presen
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_update_data.dart'; import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_update_data.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/description_view.dart'; import 'package:syncrow_web/pages/device_managment/shared/table/description_view.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/report_table.dart'; import 'package:syncrow_web/pages/device_managment/shared/table/report_table.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/constants/assets.dart'; import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart'; import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
@ -22,19 +21,10 @@ class FlushMountedPresenceSensorControlView extends StatelessWidget
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isExtraLarge = isExtraLargeScreenSize(context);
final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context);
return BlocProvider( return BlocProvider(
create: (context) => FlushMountedPresenceSensorBloc( create: (context) => FlushMountedPresenceSensorBlocFactory.create(
deviceId: device.uuid!, deviceId: device.uuid ?? '-1',
controlDeviceService: DebouncedControlDeviceService( ),
decoratee: RemoteControlDeviceService(),
),
batchControlDevicesService: DebouncedBatchControlDevicesService(
decoratee: RemoteBatchControlDevicesService(),
),
)..add(FlushMountedPresenceSensorFetchStatusEvent()),
child: BlocBuilder<FlushMountedPresenceSensorBloc, child: BlocBuilder<FlushMountedPresenceSensorBloc,
FlushMountedPresenceSensorState>( FlushMountedPresenceSensorState>(
builder: (context, state) { builder: (context, state) {
@ -42,8 +32,7 @@ class FlushMountedPresenceSensorControlView extends StatelessWidget
state is FlushMountedPresenceSensorDeviceReportsLoadingState) { state is FlushMountedPresenceSensorDeviceReportsLoadingState) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else if (state is FlushMountedPresenceSensorUpdateState) { } else if (state is FlushMountedPresenceSensorUpdateState) {
return _buildGridView( return _buildGridView(context, state.model);
context, state.model, isExtraLarge, isLarge, isMedium);
} else if (state is FlushMountedPresenceSensorDeviceReportsState) { } else if (state is FlushMountedPresenceSensorDeviceReportsState) {
return ReportsTable( return ReportsTable(
report: state.deviceReport, report: state.deviceReport,
@ -70,13 +59,7 @@ class FlushMountedPresenceSensorControlView extends StatelessWidget
} else if (state is FlushMountedPresenceSensorDeviceReportsFailedState) { } else if (state is FlushMountedPresenceSensorDeviceReportsFailedState) {
final model = final model =
context.read<FlushMountedPresenceSensorBloc>().deviceStatus; context.read<FlushMountedPresenceSensorBloc>().deviceStatus;
return _buildGridView( return _buildGridView(context, model);
context,
model,
isExtraLarge,
isLarge,
isMedium,
);
} }
return const Center( return const Center(
child: Text('Error fetching status', textAlign: TextAlign.center), child: Text('Error fetching status', textAlign: TextAlign.center),
@ -89,10 +72,10 @@ class FlushMountedPresenceSensorControlView extends StatelessWidget
Widget _buildGridView( Widget _buildGridView(
BuildContext context, BuildContext context,
FlushMountedPresenceSensorModel model, FlushMountedPresenceSensorModel model,
bool isExtraLarge,
bool isLarge,
bool isMedium,
) { ) {
final isExtraLarge = isExtraLargeScreenSize(context);
final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context);
return GridView( return GridView(
padding: const EdgeInsets.symmetric(horizontal: 50), padding: const EdgeInsets.symmetric(horizontal: 50),
shrinkWrap: true, shrinkWrap: true,
@ -208,12 +191,13 @@ class FlushMountedPresenceSensorControlView extends StatelessWidget
minValue: 20, minValue: 20,
maxValue: 300, maxValue: 300,
steps: 1, steps: 1,
action: (double value) => context.read<FlushMountedPresenceSensorBloc>().add( action: (double value) =>
FlushMountedPresenceSensorChangeValueEvent( context.read<FlushMountedPresenceSensorBloc>().add(
code: FlushMountedPresenceSensorModel.codeNoneDelay, FlushMountedPresenceSensorChangeValueEvent(
value: (value * 10).round(), code: FlushMountedPresenceSensorModel.codeNoneDelay,
), value: (value * 10).round(),
), ),
),
), ),
GestureDetector( GestureDetector(
onTap: () => context.read<FlushMountedPresenceSensorBloc>().add( onTap: () => context.read<FlushMountedPresenceSensorBloc>().add(