push door lock automation functions

This commit is contained in:
ashrafzarkanisala
2024-07-14 02:48:26 +03:00
parent 2438dcf83d
commit acbd4a9968
9 changed files with 460 additions and 161 deletions

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:bloc/bloc.dart'; import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:syncrow_app/features/devices/model/device_control_model.dart'; import 'package:syncrow_app/features/devices/model/device_control_model.dart';
import 'package:syncrow_app/features/scene/enum/operation_dialog_type.dart';
import 'package:syncrow_app/features/scene/helper/scene_operations_data_helper.dart'; import 'package:syncrow_app/features/scene/helper/scene_operations_data_helper.dart';
import 'package:syncrow_app/features/scene/model/create_scene_model.dart'; import 'package:syncrow_app/features/scene/model/create_scene_model.dart';
import 'package:syncrow_app/features/scene/model/scene_static_function.dart'; import 'package:syncrow_app/features/scene/model/scene_static_function.dart';
@ -68,11 +69,30 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
} }
if (!updated) { if (!updated) {
// Add new function if not found // Add new function if not found
OperationDialogType getOperationDialogType(String? code, [value]) {
if (code == null) {
return OperationDialogType.none;
}
if (code.contains('delay')) {
return OperationDialogType.delay;
} else if (code.contains('countdown')) {
return OperationDialogType.countdown;
} else if (code.contains('set_temp')) {
return OperationDialogType.temperature;
} else if (value.toString().toLowerCase().trim() == 'on' ||
value.toString().toLowerCase().trim() == 'off') {
return OperationDialogType.onOff;
}
return OperationDialogType.listOfOptions;
}
var newElement = SceneStaticFunction( var newElement = SceneStaticFunction(
operationName: event.operation, operationName: event.operation,
deviceName: event.deviceName, deviceName: event.deviceName,
icon: event.icon, icon: event.icon,
code: event.deviceControlModel.code ?? '', code: event.deviceControlModel.code ?? '',
operationDialogType: getOperationDialogType(
event.deviceControlModel.code, event.deviceControlModel.value),
deviceId: event.deviceId, deviceId: event.deviceId,
functionValue: event.deviceControlModel.value, functionValue: event.deviceControlModel.value,
operationalValues: [ operationalValues: [

View File

@ -0,0 +1,9 @@
enum OperationDialogType {
countdown,
delay,
temperature,
onOff,
integerSteps,
listOfOptions,
none,
}

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_app/features/app_layout/bloc/home_cubit.dart'; import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart'; import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
import 'package:syncrow_app/features/scene/enum/operation_dialog_type.dart';
import 'package:syncrow_app/features/scene/model/create_scene_model.dart'; import 'package:syncrow_app/features/scene/model/create_scene_model.dart';
@ -80,24 +81,26 @@ mixin SceneLogicHelper {
Widget getTheCorrectDialogBody( Widget getTheCorrectDialogBody(
SceneStaticFunction taskItem, SceneStaticFunction taskItem,
dynamic functionValue,
) { ) {
if (taskItem.code.contains('temp_set')) { if (taskItem.operationDialogType == OperationDialogType.temperature) {
return AlertDialogTemperatureBody( return AlertDialogTemperatureBody(
taskItem: taskItem, taskItem: taskItem,
functionValue: taskItem.functionValue, functionValue: functionValue ?? taskItem.functionValue,
); );
} else if (taskItem.code.contains('countdown') || } else if ((taskItem.operationDialogType ==
taskItem.deviceId.contains('delay')) { OperationDialogType.countdown) ||
(taskItem.operationDialogType == OperationDialogType.delay)) {
return AlertDialogCountdown( return AlertDialogCountdown(
durationValue: taskItem.functionValue, durationValue: taskItem.functionValue,
functionValue: taskItem.functionValue, functionValue: functionValue ?? taskItem.functionValue,
function: taskItem, function: taskItem,
); );
} }
return AlertDialogFunctionsOperationsBody( return AlertDialogFunctionsOperationsBody(
taskItem: taskItem, taskItem: taskItem,
functionValue: taskItem.functionValue, functionValue: functionValue ?? taskItem.functionValue,
); );
} }
} }

View File

@ -1,5 +1,6 @@
import 'package:syncrow_app/features/devices/model/function_model.dart'; import 'package:syncrow_app/features/devices/model/function_model.dart';
import 'package:syncrow_app/features/scene/enum/ac_values.dart'; import 'package:syncrow_app/features/scene/enum/ac_values.dart';
import 'package:syncrow_app/features/scene/enum/operation_dialog_type.dart';
import 'package:syncrow_app/features/scene/model/scene_details_model.dart'; import 'package:syncrow_app/features/scene/model/scene_details_model.dart';
import 'package:syncrow_app/features/scene/model/scene_static_function.dart'; import 'package:syncrow_app/features/scene/model/scene_static_function.dart';
import 'package:syncrow_app/generated/assets.dart'; import 'package:syncrow_app/generated/assets.dart';
@ -128,6 +129,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Sensitivity', operationName: 'Sensitivity',
code: 'sensitivity', code: 'sensitivity',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon, icon: Assets.assetsSensitivityOperationIcon,
@ -205,17 +207,207 @@ mixin SceneOperationsDataHelper {
SceneStaticFunction( SceneStaticFunction(
deviceId: deviceId, deviceId: deviceId,
deviceName: deviceName, deviceName: deviceName,
icon: Assets.assetsIconsDoorLock, icon: Assets.assetsFingerprintUnlock,
operationName: 'Set Door lock Normal Open', operationName: 'Fingerprint Unlock',
functionValue: functionValue, functionValue: functionValue,
code: 'normal_open_switch', code: 'unlock_fingerprint',
operationDialogType: OperationDialogType.integerSteps,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: '',
description: "",
value: 0,
),
],
),
SceneStaticFunction(
deviceId: deviceId,
deviceName: deviceName,
icon: Assets.assetsPasswordUnlock,
operationName: 'Password Unlock',
functionValue: functionValue,
code: 'unlock_password',
operationDialogType: OperationDialogType.integerSteps,
operationalValues: [
SceneOperationalValue(
icon: '',
description: "",
value: 0,
),
],
),
SceneStaticFunction(
deviceId: deviceId,
deviceName: deviceName,
icon: Assets.assetsCardUnlock,
operationName: 'Card Unlock',
functionValue: functionValue,
code: 'unlock_card',
operationDialogType: OperationDialogType.integerSteps,
operationalValues: [
SceneOperationalValue(
icon: '',
description: "",
value: 0,
),
],
),
SceneStaticFunction(
deviceId: deviceId,
deviceName: deviceName,
icon: Assets.assetsLockAlarm,
operationName: 'Lock Alarm',
functionValue: functionValue,
code: 'alarm_lock',
operationDialogType: OperationDialogType.none,
operationalValues: [],
),
SceneStaticFunction(
deviceId: deviceId,
deviceName: deviceName,
icon: Assets.assetsRemoteUnlockReq,
operationName: 'Remote Unlock Request',
functionValue: functionValue,
code: 'unlock_request',
operationDialogType: OperationDialogType.integerSteps,
operationalValues: [
SceneOperationalValue(
icon: '',
description: "",
value: 0,
),
],
),
SceneStaticFunction(
deviceId: deviceId,
deviceName: deviceName,
icon: Assets.assetsResidualElectricity,
operationName: 'Residual Electricity',
functionValue: functionValue,
code: 'residual_electricity',
operationDialogType: OperationDialogType.integerSteps,
operationalValues: [
SceneOperationalValue(
icon: '',
description: "",
value: 0,
),
],
),
SceneStaticFunction(
deviceId: deviceId,
deviceName: deviceName,
icon: Assets.assetsDoubleLock,
operationName: 'Double Lock',
functionValue: functionValue,
operationDialogType: OperationDialogType.onOff,
code: 'reverse_lock',
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower,
description: "ON",
value: true,
),
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPowerOFF, icon: Assets.assetsAcPowerOFF,
description: "OFF", description: "OFF",
value: false), value: false,
),
],
),
SceneStaticFunction(
deviceId: deviceId,
deviceName: deviceName,
icon: Assets.assetsRemoteUnlockViaApp,
operationName: 'Remote Unlock Via App',
functionValue: functionValue,
operationDialogType: OperationDialogType.integerSteps,
code: 'unlock_app',
operationalValues: [
SceneOperationalValue(
icon: '',
description: "",
value: 0,
),
],
),
SceneStaticFunction(
deviceId: deviceId,
deviceName: deviceName,
icon: Assets.assetsHijackAlarm,
operationName: 'Hijack Alarm',
functionValue: functionValue,
operationDialogType: OperationDialogType.onOff,
code: 'hijack',
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower,
description: "ON",
value: true,
),
SceneOperationalValue(
icon: Assets.assetsAcPowerOFF,
description: "OFF",
value: false,
),
],
),
SceneStaticFunction(
deviceId: deviceId,
deviceName: deviceName,
icon: Assets.assetsDoorlockNormalOpen,
operationName: 'Set Door Lock Normal Open',
functionValue: functionValue,
code: 'normal_open_switch',
operationDialogType: OperationDialogType.onOff,
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower,
description: "ON",
value: true,
),
SceneOperationalValue(
icon: Assets.assetsAcPowerOFF,
description: "OFF",
value: false,
),
],
),
SceneStaticFunction(
deviceId: deviceId,
deviceName: deviceName,
icon: Assets.assetsDoorlockNormalOpen,
operationName: 'Doorbell',
functionValue: functionValue,
code: 'doorbell',
operationDialogType: OperationDialogType.onOff,
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower,
description: "ON",
value: true,
),
SceneOperationalValue(
icon: Assets.assetsAcPowerOFF,
description: "OFF",
value: false,
),
],
),
SceneStaticFunction(
deviceId: deviceId,
deviceName: deviceName,
icon: Assets.assetsTempPasswordUnlock,
operationName: 'Temporary Password Unlock',
functionValue: functionValue,
operationDialogType: OperationDialogType.integerSteps,
code: 'unlock_temporary',
operationalValues: [
SceneOperationalValue(
icon: '',
description: "",
value: 0,
),
], ],
), ),
]; ];
@ -228,6 +420,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Set Door lock Normal Open', operationName: 'Set Door lock Normal Open',
functionValue: functionValue, functionValue: functionValue,
code: 'normal_open_switch', code: 'normal_open_switch',
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -253,6 +446,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Far Detection', operationName: 'Far Detection',
code: 'far_detection', code: 'far_detection',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction, icon: Assets.assetsFarDetectionFunction,
@ -311,6 +505,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Motion Detection Sensitivity', operationName: 'Motion Detection Sensitivity',
code: 'motion_sensitivity_value', code: 'motion_sensitivity_value',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon, icon: Assets.assetsSensitivityOperationIcon,
@ -346,6 +541,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Motionless Detection Sensitivity', operationName: 'Motionless Detection Sensitivity',
code: 'motionless_sensitivity', code: 'motionless_sensitivity',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
iconValue: '1', iconValue: '1',
@ -386,6 +582,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Indicator', operationName: 'Indicator',
code: 'indicator', code: 'indicator',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -400,6 +597,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Nobody Time', operationName: 'Nobody Time',
code: 'presence_time', code: 'presence_time',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.countdown,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -431,6 +629,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Switch Alarm Sound', operationName: 'Switch Alarm Sound',
code: 'switch_alarm_sound', code: 'switch_alarm_sound',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -445,6 +644,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Master State', operationName: 'Master State',
code: 'master_state', code: 'master_state',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, icon: Assets.assetsAcPower,
@ -465,6 +665,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Factory Reset', operationName: 'Factory Reset',
code: 'factory_reset', code: 'factory_reset',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSceneRefresh, description: "ON", value: true), icon: Assets.assetsSceneRefresh, description: "ON", value: true),
@ -490,6 +691,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 1 Switch', operationName: 'Light 1 Switch',
code: 'switch_1', code: 'switch_1',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -504,6 +706,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 2 Switch', operationName: 'Light 2 Switch',
code: 'switch_2', code: 'switch_2',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -518,6 +721,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 3 Switch', operationName: 'Light 3 Switch',
code: 'switch_3', code: 'switch_3',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -532,6 +736,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 1 CountDown', operationName: 'Light 1 CountDown',
code: 'countdown_1', code: 'countdown_1',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.countdown,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -543,6 +748,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 2 CountDown', operationName: 'Light 2 CountDown',
code: 'countdown_2', code: 'countdown_2',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.countdown,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -554,6 +760,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 3 CountDown', operationName: 'Light 3 CountDown',
code: 'countdown_3', code: 'countdown_3',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.countdown,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -577,6 +784,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Power', operationName: 'Power',
code: 'switch', code: 'switch',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, icon: Assets.assetsAcPower,
@ -597,6 +805,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Mode', operationName: 'Mode',
code: 'mode', code: 'mode',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcCooling, icon: Assets.assetsAcCooling,
@ -622,6 +831,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Set Temperature', operationName: 'Set Temperature',
code: 'temp_set', code: 'temp_set',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.temperature,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsCelsiusDegrees, icon: Assets.assetsCelsiusDegrees,
@ -637,6 +847,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Fan Speed', operationName: 'Fan Speed',
code: 'level', code: 'level',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcFanLow, icon: Assets.assetsAcFanLow,
@ -667,6 +878,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Child Lock', operationName: 'Child Lock',
code: 'child_lock', code: 'child_lock',
functionValue: functionValue, functionValue: functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSceneChildLock, icon: Assets.assetsSceneChildLock,
@ -700,6 +912,7 @@ mixin SceneOperationsDataHelper {
deviceIcon: Assets.delay, deviceIcon: Assets.delay,
icon: Assets.delay, icon: Assets.delay,
operationName: 'delay', operationName: 'delay',
operationDialogType: OperationDialogType.delay,
functionValue: action.executorProperty.delaySeconds, functionValue: action.executorProperty.delaySeconds,
code: '', code: '',
operationalValues: [ operationalValues: [
@ -725,6 +938,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Sensitivity', operationName: 'Sensitivity',
code: 'sensitivity', code: 'sensitivity',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon, icon: Assets.assetsSensitivityOperationIcon,
@ -790,6 +1004,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Set Door lock Normal Open', operationName: 'Set Door lock Normal Open',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
code: 'normal_open_switch', code: 'normal_open_switch',
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -812,6 +1027,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Far Detection', operationName: 'Far Detection',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
code: 'far_detection', code: 'far_detection',
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction, icon: Assets.assetsFarDetectionFunction,
@ -875,6 +1091,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Motion Detection Sensitivity', operationName: 'Motion Detection Sensitivity',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
code: 'motion_sensitivity_value', code: 'motion_sensitivity_value',
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon, icon: Assets.assetsSensitivityOperationIcon,
@ -915,6 +1132,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Motionless Detection Sensitivity', operationName: 'Motionless Detection Sensitivity',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
code: 'motion_sensitivity_value', code: 'motion_sensitivity_value',
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
iconValue: '1', iconValue: '1',
@ -960,9 +1178,13 @@ mixin SceneOperationsDataHelper {
operationName: 'Indicator', operationName: 'Indicator',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
code: 'indicator', code: 'indicator',
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower,
description: "ON",
value: true,
),
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPowerOFF, icon: Assets.assetsAcPowerOFF,
description: "OFF", description: "OFF",
@ -982,6 +1204,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Nobody Time', operationName: 'Nobody Time',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
code: 'presence_time', code: 'presence_time',
operationDialogType: OperationDialogType.temperature,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -998,6 +1221,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Switch Alarm Sound', operationName: 'Switch Alarm Sound',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
code: 'switch_alarm_sound', code: 'switch_alarm_sound',
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, icon: Assets.assetsAcPower,
@ -1022,6 +1246,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Master State', operationName: 'Master State',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
code: 'master_state', code: 'master_state',
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, icon: Assets.assetsAcPower,
@ -1047,6 +1272,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Reset Factory', operationName: 'Reset Factory',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
code: 'factory_reset', code: 'factory_reset',
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSceneRefresh, icon: Assets.assetsSceneRefresh,
@ -1070,6 +1296,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 1 Switch', operationName: 'Light 1 Switch',
code: 'switch_1', code: 'switch_1',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, icon: Assets.assetsAcPower,
@ -1080,11 +1307,11 @@ mixin SceneOperationsDataHelper {
icon: Assets.assetsAcPowerOFF, icon: Assets.assetsAcPowerOFF,
description: "OFF", description: "OFF",
value: false), value: false),
SceneOperationalValue( // SceneOperationalValue(
icon: Assets.assetsSceneRefresh, // icon: Assets.assetsSceneRefresh,
description: "Reverse Switch", // description: "Reverse Switch",
value: null, // value: null,
), // ),
], ],
)); ));
break; break;
@ -1097,6 +1324,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 2 Switch', operationName: 'Light 2 Switch',
code: 'switch_2', code: 'switch_2',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -1104,11 +1332,11 @@ mixin SceneOperationsDataHelper {
icon: Assets.assetsAcPowerOFF, icon: Assets.assetsAcPowerOFF,
description: "OFF", description: "OFF",
value: false), value: false),
SceneOperationalValue( // SceneOperationalValue(
icon: Assets.assetsSceneRefresh, // icon: Assets.assetsSceneRefresh,
description: "Reverse Switch", // description: "Reverse Switch",
value: null, // value: null,
), // ),
], ],
)); ));
break; break;
@ -1121,6 +1349,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 3 Switch', operationName: 'Light 3 Switch',
code: 'switch_3', code: 'switch_3',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -1128,11 +1357,11 @@ mixin SceneOperationsDataHelper {
icon: Assets.assetsAcPowerOFF, icon: Assets.assetsAcPowerOFF,
description: "OFF", description: "OFF",
value: false), value: false),
SceneOperationalValue( // SceneOperationalValue(
icon: Assets.assetsSceneRefresh, // icon: Assets.assetsSceneRefresh,
description: "Reverse Switch", // description: "Reverse Switch",
value: null, // value: null,
), // ),
], ],
)); ));
break; break;
@ -1145,6 +1374,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 1 CountDown', operationName: 'Light 1 CountDown',
code: 'countdown_1', code: 'countdown_1',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.countdown,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -1159,6 +1389,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 2 CountDown', operationName: 'Light 2 CountDown',
code: 'countdown_2', code: 'countdown_2',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.countdown,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -1173,6 +1404,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 3 CountDown', operationName: 'Light 3 CountDown',
code: 'countdown_3', code: 'countdown_3',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.countdown,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -1187,6 +1419,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Power', operationName: 'Power',
code: 'switch', code: 'switch',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, icon: Assets.assetsAcPower,
@ -1210,6 +1443,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Set Temperature', operationName: 'Set Temperature',
code: 'temp_set', code: 'temp_set',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.temperature,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsCelsiusDegrees, icon: Assets.assetsCelsiusDegrees,
@ -1228,6 +1462,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Mode', operationName: 'Mode',
code: 'mode', code: 'mode',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcCooling, icon: Assets.assetsAcCooling,
@ -1256,6 +1491,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Fan Speed', operationName: 'Fan Speed',
code: 'level', code: 'level',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcFanLow, icon: Assets.assetsAcFanLow,
@ -1289,6 +1525,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Child Lock', operationName: 'Child Lock',
code: 'child_lock', code: 'child_lock',
functionValue: executorProperty.functionValue, functionValue: executorProperty.functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSceneChildLock, icon: Assets.assetsSceneChildLock,
@ -1330,6 +1567,7 @@ mixin SceneOperationsDataHelper {
operationName: 'delay', operationName: 'delay',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
code: '', code: '',
operationDialogType: OperationDialogType.delay,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: '', icon: '',
@ -1352,6 +1590,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Sensitivity', operationName: 'Sensitivity',
code: 'sensitivity', code: 'sensitivity',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon, icon: Assets.assetsSensitivityOperationIcon,
@ -1417,6 +1656,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Set Door lock Normal Open', operationName: 'Set Door lock Normal Open',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
code: 'normal_open_switch', code: 'normal_open_switch',
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -1439,6 +1679,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Far Detection', operationName: 'Far Detection',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
code: 'far_detection', code: 'far_detection',
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction, icon: Assets.assetsFarDetectionFunction,
@ -1502,6 +1743,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Motion Detection Sensitivity', operationName: 'Motion Detection Sensitivity',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
code: 'motion_sensitivity_value', code: 'motion_sensitivity_value',
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon, icon: Assets.assetsSensitivityOperationIcon,
@ -1542,6 +1784,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Motionless Detection Sensitivity', operationName: 'Motionless Detection Sensitivity',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
code: 'motion_sensitivity_value', code: 'motion_sensitivity_value',
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
iconValue: '1', iconValue: '1',
@ -1587,6 +1830,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Indicator', operationName: 'Indicator',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
code: 'indicator', code: 'indicator',
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -1609,6 +1853,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Nobody Time', operationName: 'Nobody Time',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
code: 'presence_time', code: 'presence_time',
operationDialogType: OperationDialogType.temperature,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -1625,6 +1870,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Switch Alarm Sound', operationName: 'Switch Alarm Sound',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
code: 'switch_alarm_sound', code: 'switch_alarm_sound',
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, icon: Assets.assetsAcPower,
@ -1649,6 +1895,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Master State', operationName: 'Master State',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
code: 'master_state', code: 'master_state',
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, icon: Assets.assetsAcPower,
@ -1674,6 +1921,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Reset Factory', operationName: 'Reset Factory',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
code: 'factory_reset', code: 'factory_reset',
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSceneRefresh, icon: Assets.assetsSceneRefresh,
@ -1697,6 +1945,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 1 Switch', operationName: 'Light 1 Switch',
code: 'switch_1', code: 'switch_1',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, icon: Assets.assetsAcPower,
@ -1719,6 +1968,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 2 Switch', operationName: 'Light 2 Switch',
code: 'switch_2', code: 'switch_2',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -1738,6 +1988,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 3 Switch', operationName: 'Light 3 Switch',
code: 'switch_3', code: 'switch_3',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true), icon: Assets.assetsAcPower, description: "ON", value: true),
@ -1757,6 +2008,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 1 CountDown', operationName: 'Light 1 CountDown',
code: 'countdown_1', code: 'countdown_1',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
operationDialogType: OperationDialogType.countdown,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -1771,6 +2023,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 2 CountDown', operationName: 'Light 2 CountDown',
code: 'countdown_2', code: 'countdown_2',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
operationDialogType: OperationDialogType.countdown,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -1785,6 +2038,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Light 3 CountDown', operationName: 'Light 3 CountDown',
code: 'countdown_3', code: 'countdown_3',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
operationDialogType: OperationDialogType.countdown,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],
@ -1799,6 +2053,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Power', operationName: 'Power',
code: 'switch', code: 'switch',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcPower, icon: Assets.assetsAcPower,
@ -1824,6 +2079,7 @@ mixin SceneOperationsDataHelper {
functionValue: taskItem.functionValue != null functionValue: taskItem.functionValue != null
? ((taskItem.functionValue / 10) as double).toInt() ? ((taskItem.functionValue / 10) as double).toInt()
: null, : null,
operationDialogType: OperationDialogType.temperature,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsCelsiusDegrees, icon: Assets.assetsCelsiusDegrees,
@ -1842,6 +2098,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Mode', operationName: 'Mode',
code: 'mode', code: 'mode',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcCooling, icon: Assets.assetsAcCooling,
@ -1870,6 +2127,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Fan Speed', operationName: 'Fan Speed',
code: 'level', code: 'level',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
operationDialogType: OperationDialogType.listOfOptions,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsAcFanLow, icon: Assets.assetsAcFanLow,
@ -1903,6 +2161,7 @@ mixin SceneOperationsDataHelper {
operationName: 'Child Lock', operationName: 'Child Lock',
code: 'child_lock', code: 'child_lock',
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
operationDialogType: OperationDialogType.onOff,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsSceneChildLock, icon: Assets.assetsSceneChildLock,

View File

@ -1,6 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:syncrow_app/features/scene/enum/operation_dialog_type.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
class SceneStaticFunction { class SceneStaticFunction {
@ -13,6 +14,7 @@ class SceneStaticFunction {
final String uniqueCustomId; final String uniqueCustomId;
final dynamic functionValue; final dynamic functionValue;
final String? deviceIcon; final String? deviceIcon;
final OperationDialogType operationDialogType;
SceneStaticFunction({ SceneStaticFunction({
required this.icon, required this.icon,
@ -23,6 +25,7 @@ class SceneStaticFunction {
required this.operationName, required this.operationName,
required this.functionValue, required this.functionValue,
this.deviceIcon, this.deviceIcon,
required this.operationDialogType,
}) : uniqueCustomId = const Uuid().v4(); }) : uniqueCustomId = const Uuid().v4();
SceneStaticFunction copyWith({ SceneStaticFunction copyWith({
@ -35,6 +38,7 @@ class SceneStaticFunction {
dynamic functionValue, dynamic functionValue,
String? deviceIcon, String? deviceIcon,
String? deviceName, String? deviceName,
OperationDialogType? operationDialogType,
}) { }) {
return SceneStaticFunction( return SceneStaticFunction(
icon: icon ?? this.icon, icon: icon ?? this.icon,
@ -45,6 +49,7 @@ class SceneStaticFunction {
operationName: operationName ?? this.operationName, operationName: operationName ?? this.operationName,
functionValue: functionValue ?? this.functionValue, functionValue: functionValue ?? this.functionValue,
deviceIcon: deviceIcon ?? this.deviceIcon, deviceIcon: deviceIcon ?? this.deviceIcon,
operationDialogType: operationDialogType ?? this.operationDialogType,
); );
} }
@ -57,8 +62,8 @@ class SceneStaticFunction {
'deviceId': deviceId, 'deviceId': deviceId,
'operationName': operationName, 'operationName': operationName,
'functionValue': functionValue, 'functionValue': functionValue,
'deviceIcon': deviceIcon 'deviceIcon': deviceIcon,
'operationDialogType': operationDialogType.name
}; };
} }
@ -74,6 +79,9 @@ class SceneStaticFunction {
operationName: map['operationName'] ?? '', operationName: map['operationName'] ?? '',
functionValue: map['functionValue'] ?? '', functionValue: map['functionValue'] ?? '',
deviceIcon: map['deviceIcon'] ?? '', deviceIcon: map['deviceIcon'] ?? '',
operationDialogType: map['operationDialogType'] != null
? OperationDialogType.values.byName(map['operationDialogType'])
: OperationDialogType.none,
); );
} }
@ -84,7 +92,7 @@ class SceneStaticFunction {
@override @override
String toString() { String toString() {
return 'SceneStaticFunction(icon: $icon, name: $deviceName, code: $code, operationalValues: $operationalValues, deviceId: $deviceId, operationName: $operationName, functionValue: $functionValue, deviceIcon: $deviceIcon)'; return 'SceneStaticFunction(icon: $icon, name: $deviceName, code: $code, operationalValues: $operationalValues, deviceId: $deviceId, operationName: $operationName, functionValue: $functionValue, deviceIcon: $deviceIcon, operationDialogType: $operationDialogType)';
} }
@override @override
@ -98,6 +106,7 @@ class SceneStaticFunction {
other.operationName == operationName && other.operationName == operationName &&
other.functionValue == functionValue && other.functionValue == functionValue &&
other.deviceIcon == deviceIcon && other.deviceIcon == deviceIcon &&
other.operationDialogType == operationDialogType &&
listEquals(other.operationalValues, operationalValues) && listEquals(other.operationalValues, operationalValues) &&
other.deviceId == deviceId; other.deviceId == deviceId;
} }
@ -111,6 +120,7 @@ class SceneStaticFunction {
operationName.hashCode ^ operationName.hashCode ^
functionValue.hashCode ^ functionValue.hashCode ^
deviceIcon.hashCode ^ deviceIcon.hashCode ^
operationDialogType.hashCode ^
operationalValues.hashCode; operationalValues.hashCode;
} }
} }

View File

@ -3,6 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/devices/model/device_control_model.dart'; import 'package:syncrow_app/features/devices/model/device_control_model.dart';
import 'package:syncrow_app/features/devices/model/device_model.dart'; import 'package:syncrow_app/features/devices/model/device_model.dart';
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart'; import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
import 'package:syncrow_app/features/scene/enum/operation_dialog_type.dart';
import 'package:syncrow_app/features/scene/helper/scene_logic_helper.dart';
import 'package:syncrow_app/features/scene/helper/scene_operations_data_helper.dart'; import 'package:syncrow_app/features/scene/helper/scene_operations_data_helper.dart';
import 'package:syncrow_app/features/scene/model/scene_static_function.dart'; import 'package:syncrow_app/features/scene/model/scene_static_function.dart';
import 'package:syncrow_app/features/scene/widgets/alert_dialogs/alert_dialog_countdown.dart'; import 'package:syncrow_app/features/scene/widgets/alert_dialogs/alert_dialog_countdown.dart';
@ -19,7 +21,7 @@ import 'package:syncrow_app/utils/context_extension.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
class DeviceFunctionsView extends StatelessWidget class DeviceFunctionsView extends StatelessWidget
with SceneOperationsDataHelper { with SceneOperationsDataHelper, SceneLogicHelper {
const DeviceFunctionsView({super.key}); const DeviceFunctionsView({super.key});
@override @override
@ -88,13 +90,10 @@ class DeviceFunctionsView extends StatelessWidget
), ),
leadingWidth: 80, leadingWidth: 80,
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
child: Padding(
padding: const EdgeInsets.only(top: 24.0),
child: ListView.builder( child: ListView.builder(
shrinkWrap: true, shrinkWrap: true,
itemCount: functions.length, itemCount: functions.length,
padding: EdgeInsets.zero, padding: const EdgeInsets.only(top: 24.0),
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, index) { itemBuilder: (context, index) {
return DefaultContainer( return DefaultContainer(
padding: index == 0 padding: index == 0
@ -140,17 +139,16 @@ class DeviceFunctionsView extends StatelessWidget
.selectedValues[functions[index].code]; .selectedValues[functions[index].code];
context.customAlertDialog( context.customAlertDialog(
alertBody: functions[index].code == 'temp_set' alertBody: functions[index].operationDialogType ==
OperationDialogType.temperature
? AlertDialogTemperatureBody( ? AlertDialogTemperatureBody(
taskItem: functions[index], taskItem: functions[index],
functionValue: functionValues, functionValue: functionValues,
) )
: (functions[index] : ((functions[index].operationDialogType ==
.code OperationDialogType.countdown) ||
.contains('countdown') || (functions[index].operationDialogType ==
functions[index] OperationDialogType.countdown))
.code
.contains('presence_time'))
? AlertDialogCountdown( ? AlertDialogCountdown(
durationValue: functions[index] durationValue: functions[index]
.operationalValues .operationalValues
@ -188,9 +186,8 @@ class DeviceFunctionsView extends StatelessWidget
Navigator.pop(context); Navigator.pop(context);
}, },
onDismiss: () { onDismiss: () {
final tempTaskList = context final tempTaskList =
.read<CreateSceneBloc>() context.read<CreateSceneBloc>().tempTasksList;
.tempTasksList;
for (var element in tempTaskList) { for (var element in tempTaskList) {
if (element.code == functions[index].code) { if (element.code == functions[index].code) {
context.read<CreateSceneBloc>().add( context.read<CreateSceneBloc>().add(
@ -217,7 +214,6 @@ class DeviceFunctionsView extends StatelessWidget
), ),
); );
}, },
),
)); ));
} }
} }

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_app/features/devices/model/device_control_model.dart'; import 'package:syncrow_app/features/devices/model/device_control_model.dart';
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart'; import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
import 'package:syncrow_app/features/scene/enum/operation_dialog_type.dart';
import 'package:syncrow_app/features/scene/model/scene_static_function.dart'; import 'package:syncrow_app/features/scene/model/scene_static_function.dart';
import 'package:syncrow_app/features/scene/widgets/alert_dialogs/alert_dialog_countdown.dart'; import 'package:syncrow_app/features/scene/widgets/alert_dialogs/alert_dialog_countdown.dart';
import 'package:syncrow_app/features/scene/widgets/scene_list_tile.dart'; import 'package:syncrow_app/features/scene/widgets/scene_list_tile.dart';
@ -97,6 +98,7 @@ class CustomBottomSheetWidget extends StatelessWidget {
operationName: 'Delay The Action', operationName: 'Delay The Action',
code: '', code: '',
functionValue: 0, functionValue: 0,
operationDialogType: OperationDialogType.delay,
operationalValues: [ operationalValues: [
SceneOperationalValue(icon: '', value: 0), SceneOperationalValue(icon: '', value: 0),
], ],

View File

@ -62,7 +62,7 @@ class ThenAddedTasksContainer extends StatelessWidget
/// show alert dialog based on type /// show alert dialog based on type
context.customAlertDialog( context.customAlertDialog(
alertBody: getTheCorrectDialogBody(functionOperation.first), alertBody: getTheCorrectDialogBody(functionOperation.first, null),
title: functionOperation.first.operationName, title: functionOperation.first.operationName,
onConfirm: () { onConfirm: () {
final savedCode = functionOperation.first.deviceId.contains('delay') final savedCode = functionOperation.first.deviceId.contains('delay')

View File

@ -74,7 +74,7 @@ flutter:
- assets/icons/MenuIcons/SecurityAndPrivacyIcons/ - assets/icons/MenuIcons/SecurityAndPrivacyIcons/
- assets/icons/curtainsIcon/ - assets/icons/curtainsIcon/
- assets/icons/functions_icons/ - assets/icons/functions_icons/
- assets/icons/functions_icons/automation_functions - assets/icons/functions_icons/automation_functions/
fonts: fonts:
- family: Aftika - family: Aftika
fonts: fonts: