mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-10 15:17:31 +00:00
refactor function tap handlers to use RoutineTapFunctionHelper
for improved code reuse and readability, and to remove code duplication.
This commit is contained in:
@ -9,6 +9,7 @@ import 'package:syncrow_web/pages/routines/models/ac/ac_operational_value.dart';
|
|||||||
import 'package:syncrow_web/pages/routines/models/device_functions.dart';
|
import 'package:syncrow_web/pages/routines/models/device_functions.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart';
|
import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart';
|
import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart';
|
||||||
|
import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.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';
|
import 'package:syncrow_web/utils/extension/build_context_x.dart';
|
||||||
|
|
||||||
@ -76,30 +77,23 @@ class ACHelper {
|
|||||||
acFunctions: acFunctions,
|
acFunctions: acFunctions,
|
||||||
device: device,
|
device: device,
|
||||||
onFunctionSelected: (functionCode, operationName) {
|
onFunctionSelected: (functionCode, operationName) {
|
||||||
context.read<FunctionBloc>().add(
|
RoutineTapFunctionHelper.onTapFunction(
|
||||||
SelectFunction(
|
context,
|
||||||
functionCode: functionCode,
|
functionCode: functionCode,
|
||||||
operationName: operationName,
|
functionOperationName: operationName,
|
||||||
),
|
functionValueDescription:
|
||||||
);
|
selectedFunctionData.valueDescription,
|
||||||
if (functionCode == 'temp_set' ||
|
deviceUuid: device?.uuid,
|
||||||
functionCode == 'temp_current') {
|
codesToAddIntoFunctionsWithDefaultValue: [
|
||||||
context.read<FunctionBloc>().add(
|
'temp_set',
|
||||||
AddFunction(
|
'temp_current',
|
||||||
functionData: DeviceFunctionData(
|
],
|
||||||
entityId: device?.uuid ?? '',
|
defaultValue: functionCode == 'temp_set'
|
||||||
functionCode: functionCode,
|
? 200
|
||||||
operationName: operationName,
|
: functionCode == 'temp_current'
|
||||||
value: functionCode == 'temp_set'
|
? -100
|
||||||
? 200
|
: 0,
|
||||||
: -100,
|
);
|
||||||
condition: '==',
|
|
||||||
valueDescription: selectedFunctionData
|
|
||||||
.valueDescription,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -135,6 +135,7 @@ class _CeilingSensorDialogState extends State<CeilingSensorDialog> {
|
|||||||
cpsFunctions: _cpsFunctions,
|
cpsFunctions: _cpsFunctions,
|
||||||
device: widget.device,
|
device: widget.device,
|
||||||
selectedFunctionData: selectedFunctionData,
|
selectedFunctionData: selectedFunctionData,
|
||||||
|
dialogType: widget.dialogType,
|
||||||
),
|
),
|
||||||
if (state.selectedFunction != null)
|
if (state.selectedFunction != null)
|
||||||
Expanded(
|
Expanded(
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.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/routines/bloc/functions_bloc/functions_bloc_bloc.dart';
|
|
||||||
import 'package:syncrow_web/pages/routines/models/ceiling_presence_sensor_functions.dart';
|
import 'package:syncrow_web/pages/routines/models/ceiling_presence_sensor_functions.dart';
|
||||||
import 'package:syncrow_web/pages/routines/models/device_functions.dart';
|
import 'package:syncrow_web/pages/routines/models/device_functions.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/routine_dialog_function_list_tile.dart';
|
import 'package:syncrow_web/pages/routines/widgets/routine_dialog_function_list_tile.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/ceiling_sensor/ceiling_sensor_helper.dart';
|
import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.dart';
|
||||||
import 'package:syncrow_web/utils/color_manager.dart';
|
import 'package:syncrow_web/utils/color_manager.dart';
|
||||||
|
|
||||||
class CpsFunctionsList extends StatelessWidget {
|
class CpsFunctionsList extends StatelessWidget {
|
||||||
const CpsFunctionsList({
|
const CpsFunctionsList({
|
||||||
required this.cpsFunctions,
|
required this.cpsFunctions,
|
||||||
required this.device,
|
required this.device,
|
||||||
required this.selectedFunctionData,
|
required this.selectedFunctionData,
|
||||||
|
required this.dialogType,
|
||||||
super.key,
|
super.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
final List<CpsFunctions> cpsFunctions;
|
final List<CpsFunctions> cpsFunctions;
|
||||||
final AllDevicesModel? device;
|
final AllDevicesModel? device;
|
||||||
final DeviceFunctionData? selectedFunctionData;
|
final DeviceFunctionData? selectedFunctionData;
|
||||||
|
final String dialogType;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -36,28 +36,27 @@ class CpsFunctionsList extends StatelessWidget {
|
|||||||
return RoutineDialogFunctionListTile(
|
return RoutineDialogFunctionListTile(
|
||||||
iconPath: function.icon,
|
iconPath: function.icon,
|
||||||
operationName: function.operationName,
|
operationName: function.operationName,
|
||||||
onTap: () {
|
onTap: () => RoutineTapFunctionHelper.onTapFunction(
|
||||||
context.read<FunctionBloc>().add(
|
context,
|
||||||
SelectFunction(
|
functionCode: function.code,
|
||||||
functionCode: function.code,
|
functionOperationName: function.operationName,
|
||||||
operationName: function.operationName,
|
functionValueDescription: selectedFunctionData?.valueDescription,
|
||||||
),
|
deviceUuid: device?.uuid,
|
||||||
);
|
codesToAddIntoFunctionsWithDefaultValue: [
|
||||||
if (!CeilingSensorHelper.toggleCodes.contains(function.code)) {
|
'static_max_dis',
|
||||||
context.read<FunctionBloc>().add(
|
'presence_reference',
|
||||||
AddFunction(
|
'moving_reference',
|
||||||
functionData: DeviceFunctionData(
|
'perceptual_boundary',
|
||||||
entityId: device?.uuid ?? '',
|
'moving_boundary',
|
||||||
functionCode: function.code,
|
'moving_rigger_time',
|
||||||
operationName: function.operationName,
|
'moving_static_time',
|
||||||
value: 0,
|
'none_body_time',
|
||||||
condition: '==',
|
'moving_max_dis',
|
||||||
valueDescription: selectedFunctionData?.valueDescription,
|
'moving_range',
|
||||||
),
|
'presence_range',
|
||||||
),
|
if (dialogType == "IF") 'sensitivity',
|
||||||
);
|
],
|
||||||
}
|
),
|
||||||
},
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:syncrow_web/pages/routines/bloc/functions_bloc/functions_bloc_bloc.dart';
|
||||||
|
import 'package:syncrow_web/pages/routines/models/device_functions.dart';
|
||||||
|
|
||||||
|
abstract final class RoutineTapFunctionHelper {
|
||||||
|
const RoutineTapFunctionHelper._();
|
||||||
|
|
||||||
|
static void onTapFunction(
|
||||||
|
BuildContext context, {
|
||||||
|
required String functionCode,
|
||||||
|
required String functionOperationName,
|
||||||
|
required String? functionValueDescription,
|
||||||
|
required String? deviceUuid,
|
||||||
|
required List<String> codesToAddIntoFunctionsWithDefaultValue,
|
||||||
|
int defaultValue = 0,
|
||||||
|
}) {
|
||||||
|
final functionsBloc = context.read<FunctionBloc>();
|
||||||
|
functionsBloc.add(
|
||||||
|
SelectFunction(
|
||||||
|
functionCode: functionCode,
|
||||||
|
operationName: functionOperationName,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
final addedFunctions = functionsBloc.state.addedFunctions;
|
||||||
|
final isFunctionAlreadyAdded = addedFunctions.any(
|
||||||
|
(e) => e.functionCode == functionCode,
|
||||||
|
);
|
||||||
|
final shouldAddFunction =
|
||||||
|
codesToAddIntoFunctionsWithDefaultValue.contains(functionCode);
|
||||||
|
if (!isFunctionAlreadyAdded && shouldAddFunction) {
|
||||||
|
context.read<FunctionBloc>().add(
|
||||||
|
AddFunction(
|
||||||
|
functionData: DeviceFunctionData(
|
||||||
|
entityId: deviceUuid ?? '',
|
||||||
|
functionCode: functionCode,
|
||||||
|
operationName: functionOperationName,
|
||||||
|
value: defaultValue,
|
||||||
|
condition: '==',
|
||||||
|
valueDescription: functionValueDescription,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,7 @@ import 'package:syncrow_web/pages/routines/models/gang_switches/one_gang_switch/
|
|||||||
import 'package:syncrow_web/pages/routines/models/gang_switches/switch_operational_value.dart';
|
import 'package:syncrow_web/pages/routines/models/gang_switches/switch_operational_value.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart';
|
import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart';
|
import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart';
|
||||||
|
import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.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';
|
import 'package:syncrow_web/utils/extension/build_context_x.dart';
|
||||||
|
|
||||||
@ -86,31 +87,19 @@ class OneGangSwitchHelper {
|
|||||||
size: 16,
|
size: 16,
|
||||||
color: ColorsManager.textGray,
|
color: ColorsManager.textGray,
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () =>
|
||||||
context
|
RoutineTapFunctionHelper.onTapFunction(
|
||||||
.read<FunctionBloc>()
|
context,
|
||||||
.add(SelectFunction(
|
functionCode: function.code,
|
||||||
functionCode: function.code,
|
functionOperationName:
|
||||||
operationName: function.operationName,
|
function.operationName,
|
||||||
));
|
functionValueDescription:
|
||||||
if (function.code == 'countdown_1') {
|
selectedFunctionData.valueDescription,
|
||||||
context.read<FunctionBloc>().add(
|
deviceUuid: device?.uuid,
|
||||||
AddFunction(
|
codesToAddIntoFunctionsWithDefaultValue: [
|
||||||
functionData: DeviceFunctionData(
|
'countdown_1',
|
||||||
entityId: device?.uuid ?? '',
|
],
|
||||||
functionCode: function.code,
|
),
|
||||||
operationName:
|
|
||||||
function.operationName,
|
|
||||||
value: 0,
|
|
||||||
condition: '==',
|
|
||||||
valueDescription:
|
|
||||||
selectedFunctionData
|
|
||||||
.valueDescription,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
@ -10,6 +10,7 @@ import 'package:syncrow_web/pages/routines/models/gang_switches/base_switch_func
|
|||||||
import 'package:syncrow_web/pages/routines/models/gang_switches/switch_operational_value.dart';
|
import 'package:syncrow_web/pages/routines/models/gang_switches/switch_operational_value.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart';
|
import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart';
|
import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart';
|
||||||
|
import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.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';
|
import 'package:syncrow_web/utils/extension/build_context_x.dart';
|
||||||
|
|
||||||
@ -85,33 +86,21 @@ class ThreeGangSwitchHelper {
|
|||||||
size: 16,
|
size: 16,
|
||||||
color: ColorsManager.textGray,
|
color: ColorsManager.textGray,
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () =>
|
||||||
context
|
RoutineTapFunctionHelper.onTapFunction(
|
||||||
.read<FunctionBloc>()
|
context,
|
||||||
.add(SelectFunction(
|
functionCode: function.code,
|
||||||
functionCode: function.code,
|
functionOperationName:
|
||||||
operationName: function.operationName,
|
function.operationName,
|
||||||
));
|
functionValueDescription:
|
||||||
if (function.code == 'countdown_1' ||
|
selectedFunctionData.valueDescription,
|
||||||
function.code == 'countdown_2' ||
|
deviceUuid: device?.uuid,
|
||||||
function.code == 'countdown_3') {
|
codesToAddIntoFunctionsWithDefaultValue: [
|
||||||
context.read<FunctionBloc>().add(
|
'countdown_1',
|
||||||
AddFunction(
|
'countdown_2',
|
||||||
functionData: DeviceFunctionData(
|
'countdown_3',
|
||||||
entityId: device?.uuid ?? '',
|
],
|
||||||
functionCode: function.code,
|
),
|
||||||
operationName:
|
|
||||||
function.operationName,
|
|
||||||
value: 0,
|
|
||||||
condition: '==',
|
|
||||||
valueDescription:
|
|
||||||
selectedFunctionData
|
|
||||||
.valueDescription,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
@ -10,6 +10,7 @@ import 'package:syncrow_web/pages/routines/models/gang_switches/base_switch_func
|
|||||||
import 'package:syncrow_web/pages/routines/models/gang_switches/switch_operational_value.dart';
|
import 'package:syncrow_web/pages/routines/models/gang_switches/switch_operational_value.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart';
|
import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart';
|
import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart';
|
||||||
|
import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.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';
|
import 'package:syncrow_web/utils/extension/build_context_x.dart';
|
||||||
|
|
||||||
@ -85,32 +86,20 @@ class TwoGangSwitchHelper {
|
|||||||
size: 16,
|
size: 16,
|
||||||
color: ColorsManager.textGray,
|
color: ColorsManager.textGray,
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () =>
|
||||||
context
|
RoutineTapFunctionHelper.onTapFunction(
|
||||||
.read<FunctionBloc>()
|
context,
|
||||||
.add(SelectFunction(
|
functionCode: function.code,
|
||||||
functionCode: function.code,
|
functionOperationName:
|
||||||
operationName: function.operationName,
|
function.operationName,
|
||||||
));
|
functionValueDescription:
|
||||||
if (function.code == 'countdown_1' ||
|
selectedFunctionData.valueDescription,
|
||||||
function.code == 'countdown_2') {
|
deviceUuid: device?.uuid,
|
||||||
context.read<FunctionBloc>().add(
|
codesToAddIntoFunctionsWithDefaultValue: [
|
||||||
AddFunction(
|
'countdown_1',
|
||||||
functionData: DeviceFunctionData(
|
'countdown_2',
|
||||||
entityId: device?.uuid ?? '',
|
],
|
||||||
functionCode: function.code,
|
),
|
||||||
operationName:
|
|
||||||
function.operationName,
|
|
||||||
value: 0,
|
|
||||||
condition: '==',
|
|
||||||
valueDescription:
|
|
||||||
selectedFunctionData
|
|
||||||
.valueDescription,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
@ -8,6 +8,7 @@ import 'package:syncrow_web/pages/routines/models/device_functions.dart';
|
|||||||
import 'package:syncrow_web/pages/routines/models/wps/wps_functions.dart';
|
import 'package:syncrow_web/pages/routines/models/wps/wps_functions.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart';
|
import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart';
|
import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart';
|
||||||
|
import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.dart';
|
||||||
import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/wall_sensor/wps_value_selector_widget.dart';
|
import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/wall_sensor/wps_value_selector_widget.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';
|
import 'package:syncrow_web/utils/extension/build_context_x.dart';
|
||||||
@ -159,29 +160,18 @@ class _WallPresenceSensorState extends State<WallPresenceSensor> {
|
|||||||
size: 16,
|
size: 16,
|
||||||
color: ColorsManager.textGray,
|
color: ColorsManager.textGray,
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () => RoutineTapFunctionHelper.onTapFunction(
|
||||||
context.read<FunctionBloc>().add(
|
context,
|
||||||
SelectFunction(
|
functionCode: function.code,
|
||||||
functionCode: function.code,
|
functionOperationName: function.operationName,
|
||||||
operationName: function.operationName,
|
functionValueDescription: selectedFunctionData.valueDescription,
|
||||||
),
|
deviceUuid: widget.device?.uuid,
|
||||||
);
|
codesToAddIntoFunctionsWithDefaultValue: [
|
||||||
if (['dis_current', 'presence_time', 'illuminance_value']
|
'dis_current',
|
||||||
.contains(function.code)) {
|
'presence_time',
|
||||||
context.read<FunctionBloc>().add(
|
'illuminance_value',
|
||||||
AddFunction(
|
],
|
||||||
functionData: DeviceFunctionData(
|
),
|
||||||
entityId: widget.device?.uuid ?? '',
|
|
||||||
functionCode: function.code,
|
|
||||||
operationName: function.operationName,
|
|
||||||
value: 0,
|
|
||||||
condition: '==',
|
|
||||||
valueDescription: selectedFunctionData.valueDescription,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
Reference in New Issue
Block a user