push put api

This commit is contained in:
ashrafzarkanisala
2024-07-01 01:57:13 +03:00
parent cc6b754845
commit c01d9034fd
16 changed files with 883 additions and 176 deletions

View File

@ -31,10 +31,12 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
FutureOr<void> _onAddSceneTask( FutureOr<void> _onAddSceneTask(
AddTaskEvent event, Emitter<CreateSceneState> emit) { AddTaskEvent event, Emitter<CreateSceneState> emit) {
tasksList = List<SceneStaticFunction>.from(tempTasksList); final copyList = List<SceneStaticFunction>.from(tempTasksList);
emit(AddSceneTask(tasksList: tasksList)); tasksList.addAll(copyList);
tempTasksList.clear(); tempTasksList.clear();
selectedValues.clear();
emit(TempHoldSceneTask(tempTasksList: tempTasksList)); emit(TempHoldSceneTask(tempTasksList: tempTasksList));
emit(AddSceneTask(tasksList: tasksList));
} }
FutureOr<void> _onTempHoldSceneTask( FutureOr<void> _onTempHoldSceneTask(
@ -122,7 +124,9 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
CreateSceneWithTasksEvent event, Emitter<CreateSceneState> emit) async { CreateSceneWithTasksEvent event, Emitter<CreateSceneState> emit) async {
emit(CreateSceneLoading()); emit(CreateSceneLoading());
try { try {
final response = await SceneApi.createScene(event.createSceneModel); final response = event.updateScene
? await SceneApi.updateScene(event.createSceneModel, event.sceneId)
: await SceneApi.createScene(event.createSceneModel);
if (response['success'] == true) { if (response['success'] == true) {
tasksList.clear(); tasksList.clear();
tempTasksList.clear(); tempTasksList.clear();
@ -131,7 +135,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
emit(const CreateSceneError(message: 'Something went wrong')); emit(const CreateSceneError(message: 'Something went wrong'));
} }
} catch (e) { } catch (e) {
emit(CreateSceneError(message: e.toString())); emit(const CreateSceneError(message: 'Something went wrong'));
emit(AddSceneTask(tasksList: tasksList)); emit(AddSceneTask(tasksList: tasksList));
} }
} }
@ -149,14 +153,16 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
try { try {
final response = await SceneApi.getSceneDetails(event.sceneId); final response = await SceneApi.getSceneDetails(event.sceneId);
if (response.id.isNotEmpty) { if (response.id.isNotEmpty) {
tasksList = List.from(getTaskListFunctionsFromApi( tasksList = List<SceneStaticFunction>.from(getTaskListFunctionsFromApi(
actions: response.actions, deviceId: response.id)); actions: response.actions, deviceId: response.id));
emit(AddSceneTask(tasksList: tasksList)); emit(AddSceneTask(
tasksList: tasksList,
));
} else { } else {
emit(const CreateSceneError(message: 'Something went wrong')); emit(const CreateSceneError(message: 'Something went wrong'));
} }
} catch (e) { } catch (e) {
emit(CreateSceneError(message: e.toString())); emit(const CreateSceneError(message: 'Something went wrong'));
} }
} }

View File

@ -8,6 +8,8 @@ sealed class CreateSceneEvent extends Equatable {
} }
class AddTaskEvent extends CreateSceneEvent { class AddTaskEvent extends CreateSceneEvent {
final bool updateTaskListFromTemp;
const AddTaskEvent({required this.updateTaskListFromTemp});
@override @override
List<Object> get props => []; List<Object> get props => [];
} }
@ -80,7 +82,13 @@ class RemoveFromSelectedValueById extends CreateSceneEvent {
class CreateSceneWithTasksEvent extends CreateSceneEvent { class CreateSceneWithTasksEvent extends CreateSceneEvent {
final CreateSceneModel createSceneModel; final CreateSceneModel createSceneModel;
const CreateSceneWithTasksEvent({required this.createSceneModel}); final bool updateScene;
final String sceneId;
const CreateSceneWithTasksEvent({
required this.createSceneModel,
required this.updateScene,
required this.sceneId,
});
@override @override
List<Object> get props => [createSceneModel]; List<Object> get props => [createSceneModel];

View File

@ -21,7 +21,7 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
final scenes = await SceneApi.getScenesByUnitId(event.unitId); final scenes = await SceneApi.getScenesByUnitId(event.unitId);
emit(SceneLoaded(scenes)); emit(SceneLoaded(scenes));
} catch (e) { } catch (e) {
emit(SceneError(message: e.toString())); emit(const SceneError(message: 'Something went wrong'));
} }
} }
@ -40,7 +40,7 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
emit(const SceneError(message: 'Something went wrong')); emit(const SceneError(message: 'Something went wrong'));
} }
} catch (e) { } catch (e) {
emit(SceneError(message: e.toString())); emit(const SceneError(message: 'Something went wrong'));
} }
} }
} }

View File

@ -5,6 +5,9 @@ import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.d
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';
import 'package:syncrow_app/features/scene/widgets/alert_dialogs/alert_dialog_countdown.dart';
import 'package:syncrow_app/features/scene/widgets/alert_dialogs/alert_dialog_functions_body.dart';
import 'package:syncrow_app/features/scene/widgets/alert_dialogs/alert_dialog_temperature_body.dart';
import 'package:syncrow_app/utils/context_extension.dart'; import 'package:syncrow_app/utils/context_extension.dart';
mixin SceneLogicHelper { mixin SceneLogicHelper {
@ -17,8 +20,10 @@ mixin SceneLogicHelper {
void handleSaveButtonPress( void handleSaveButtonPress(
BuildContext context, BuildContext context,
TextEditingController sceneNameController, TextEditingController sceneNameController,
List<SceneStaticFunction> tasks, List<SceneStaticFunction> tasks, {
) { required bool updateScene,
required String sceneId,
}) {
if (isOnlyDelayOrDelayLast(tasks)) { if (isOnlyDelayOrDelayLast(tasks)) {
// Show snackbar indicating restriction // Show snackbar indicating restriction
context.showCustomSnackbar( context.showCustomSnackbar(
@ -60,11 +65,72 @@ mixin SceneLogicHelper {
}, },
), ),
); );
context context.read<CreateSceneBloc>().add(CreateSceneWithTasksEvent(
.read<CreateSceneBloc>() createSceneModel: createSceneModel,
.add(CreateSceneWithTasksEvent(createSceneModel: createSceneModel)); updateScene: updateScene,
sceneId: sceneId,
));
Navigator.pop(context); Navigator.pop(context);
} }
} }
Widget getTheCorrectDialogBody(
SceneStaticFunction taskItem,
List<SceneStaticFunction>? listOfSceneStaticFunction,
int? index,
// List<SceneStaticFunction> functionOperation
) {
bool checkTaskItemAndOperation() {
return taskItem.code == 'temp_set' || taskItem.code == 'countdown';
}
bool checkListAndIndex() {
if (listOfSceneStaticFunction == null || index == null) {
return false;
}
return listOfSceneStaticFunction[index].code == 'temp_set' ||
listOfSceneStaticFunction[index].code.contains('countdown') ||
listOfSceneStaticFunction[index].code.contains('presence_time');
}
if (checkTaskItemAndOperation()) {
if (taskItem.code == 'temp_set') {
return AlertDialogTemperatureBody(
index: index!,
functions: listOfSceneStaticFunction ?? [],
functionValue: taskItem.functionValue,
);
} else if (taskItem.code == 'countdown') {
return AlertDialogCountdown(
durationValue: taskItem.functionValue,
functionValue: taskItem.functionValue,
function: taskItem,
);
}
}
if (checkListAndIndex()) {
if (listOfSceneStaticFunction![index!].code == 'temp_set') {
return AlertDialogTemperatureBody(
index: index,
functions: listOfSceneStaticFunction,
functionValue: taskItem.functionValue,
);
} else {
return AlertDialogCountdown(
durationValue: listOfSceneStaticFunction[index].functionValue ??
taskItem.functionValue,
functionValue: taskItem.functionValue,
function: listOfSceneStaticFunction[index],
);
}
}
return AlertDialogFunctionsOperationsBody(
index: index ?? 0,
functions: listOfSceneStaticFunction ?? [],
functionValue: taskItem.functionValue,
);
}
} }

View File

@ -1266,4 +1266,606 @@ mixin SceneOperationsDataHelper {
return functions; return functions;
} }
List<SceneStaticFunction> getOperationsForOneFunction({
required String deviceId,
required SceneStaticFunction taskItem,
}) {
List<SceneStaticFunction> functions = [];
switch (taskItem.code) {
case 'sensitivity':
functions.add(
SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Presence Sensor',
deviceIcon: Assets.assetsIconsSensors,
icon: Assets.assetsSensitivityFunction,
operationName: 'Sensitivity',
code: 'sensitivity',
functionValue: taskItem.functionValue,
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 1,
description: 1.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 2,
description: 2.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 3,
description: 3.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 4,
description: 4.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 5,
description: 5.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 6,
description: 6.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 7,
description: 7.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 8,
description: 8.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 9,
description: 9.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 10,
description: 10.toString(),
),
],
),
);
break;
case 'normal_open_switch':
functions.add(
SceneStaticFunction(
deviceId: deviceId,
deviceName: 'WIFI LOCK PRO',
deviceIcon: Assets.assetsIconsDoorLock,
icon: Assets.assetsIconsDoorLock,
operationName: 'Set Door lock Normal Open',
functionValue: taskItem.functionValue,
code: 'normal_open_switch',
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true),
SceneOperationalValue(
icon: Assets.assetsAcPowerOFF,
description: "OFF",
value: false,
),
],
),
);
break;
case 'far_detection':
functions.add(
SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Human Presence Sensor',
deviceIcon: Assets.assetsIconsSensors,
icon: Assets.assetsFarDetection,
operationName: 'Far Detection',
functionValue: taskItem.functionValue,
code: 'far_detection',
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 75,
description: '75cm',
iconValue: '75',
),
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 150,
description: '150cm',
iconValue: '150',
),
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 225,
description: '225cm',
iconValue: '225',
),
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 300,
description: '300cm',
iconValue: '300',
),
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 375,
description: '375cm',
iconValue: '375',
),
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 450,
description: '450cm',
iconValue: '450',
),
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 525,
description: '525cm',
iconValue: '525',
),
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 600,
description: '600cm',
iconValue: '600',
),
],
),
);
break;
case 'motion_sensitivity_value':
functions.add(
SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Human Presence Sensor',
deviceIcon: Assets.assetsIconsSensors,
icon: Assets.assetsMotionDetection,
operationName: 'Motion Detection Sensitivity',
functionValue: taskItem.functionValue,
code: 'motion_sensitivity_value',
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 1,
description: 1.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 2,
description: 2.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 3,
description: 3.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 4,
description: 4.toString(),
),
SceneOperationalValue(
icon: Assets.assetsSensitivityOperationIcon,
value: 5,
description: 5.toString(),
),
],
),
);
break;
case 'motionless_sensitivity':
functions.add(
SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Human Presence Sensor',
deviceIcon: Assets.assetsIconsSensors,
icon: Assets.assetsMotionlessDetection,
operationName: 'Motionless Detection Sensitivity',
functionValue: taskItem.functionValue,
code: 'motion_sensitivity_value',
operationalValues: [
SceneOperationalValue(
iconValue: '1',
icon: Assets.assetsFarDetectionFunction,
value: 1,
description: '1',
),
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 2,
description: '2',
iconValue: '2',
),
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 3,
description: '3',
iconValue: '3',
),
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 4,
description: '4',
iconValue: '4',
),
SceneOperationalValue(
icon: Assets.assetsFarDetectionFunction,
value: 5,
description: '5',
iconValue: '5',
),
],
),
);
break;
case 'indicator':
functions.add(
SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Human Presence Sensor',
deviceIcon: Assets.assetsIconsSensors,
icon: Assets.assetsIndicator,
operationName: 'Indicator',
functionValue: taskItem.functionValue,
code: 'indicator',
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true),
SceneOperationalValue(
icon: Assets.assetsAcPowerOFF,
description: "OFF",
value: false,
),
],
),
);
break;
case 'presence_time':
functions.add(
SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Human Presence Sensor',
deviceIcon: Assets.assetsIconsSensors,
icon: Assets.assetsNobodyTime,
operationName: 'Nobody Time',
functionValue: taskItem.functionValue,
code: 'presence_time',
operationalValues: [
SceneOperationalValue(icon: '', value: 0),
],
),
);
break;
case 'switch_alarm_sound':
functions.add(
SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Multi-Mode Gateway Z-W-B',
deviceIcon: Assets.assetsIconsGateway,
icon: Assets.assetsSwitchAlarmSound,
operationName: 'Switch Alarm Sound',
functionValue: taskItem.functionValue,
code: 'switch_alarm_sound',
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower,
description: "ON",
value: true,
),
SceneOperationalValue(
icon: Assets.assetsAcPowerOFF,
description: "OFF",
value: false),
],
),
);
break;
case 'master_state':
functions.add(
SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Multi-Mode Gateway Z-W-B',
deviceIcon: Assets.assetsIconsGateway,
icon: Assets.assetsMasterState,
operationName: 'Master State',
functionValue: taskItem.functionValue,
code: 'master_state',
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower,
description: "Alarm",
value: 'alarm',
),
SceneOperationalValue(
icon: Assets.assetsAcPowerOFF,
description: "Normal",
value: 'normal',
),
],
),
);
break;
case 'factory_reset':
functions.add(
SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Multi-Mode Gateway Z-W-B',
deviceIcon: Assets.assetsIconsGateway,
icon: Assets.assetsFactoryReset,
operationName: 'Reset Factory',
functionValue: taskItem.functionValue,
code: 'factory_reset',
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsSceneRefresh,
description: "ON",
value: true),
SceneOperationalValue(
icon: Assets.assetsResetOff,
description: "OFF",
value: false,
),
],
),
);
break;
case 'switch_1':
functions.add(SceneStaticFunction(
deviceId: deviceId,
deviceName: '3 Gang Button Switch L-L',
deviceIcon: Assets.assetsIcons3GangSwitch,
icon: Assets.assetsAcPower,
operationName: 'Light 1 Switch',
code: 'switch_1',
functionValue: taskItem.functionValue,
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower,
description: "ON",
value: true,
),
SceneOperationalValue(
icon: Assets.assetsAcPowerOFF,
description: "OFF",
value: false),
SceneOperationalValue(
icon: Assets.assetsSceneRefresh,
description: "Reverse Switch",
value: true,
),
],
));
break;
case 'switch_2':
functions.add(SceneStaticFunction(
deviceId: deviceId,
deviceName: '3 Gang Button Switch L-L',
deviceIcon: Assets.assetsIcons3GangSwitch,
icon: Assets.assetsAcPower,
operationName: 'Light 2 Switch',
code: 'switch_2',
functionValue: taskItem.functionValue,
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true),
SceneOperationalValue(
icon: Assets.assetsAcPowerOFF,
description: "OFF",
value: false),
SceneOperationalValue(
icon: Assets.assetsSceneRefresh,
description: "Reverse Switch",
value: true,
),
],
));
break;
case 'switch_3':
functions.add(SceneStaticFunction(
deviceId: deviceId,
deviceName: '3 Gang Button Switch L-L',
deviceIcon: Assets.assetsIcons3GangSwitch,
icon: Assets.assetsAcPower,
operationName: 'Light 3 Switch',
code: 'switch_3',
functionValue: taskItem.functionValue,
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower, description: "ON", value: true),
SceneOperationalValue(
icon: Assets.assetsAcPowerOFF,
description: "OFF",
value: false),
SceneOperationalValue(
icon: Assets.assetsSceneRefresh,
description: "Reverse Switch",
value: true,
),
],
));
break;
case 'countdown_1':
functions.add(SceneStaticFunction(
deviceId: deviceId,
deviceName: '3 Gang Button Switch L-L',
deviceIcon: Assets.assetsIcons3GangSwitch,
icon: Assets.assetsLightCountdown,
operationName: 'Light 1 CountDown',
code: 'countdown_1',
functionValue: taskItem.functionValue,
operationalValues: [
SceneOperationalValue(icon: '', value: 0),
],
));
break;
case 'countdown_2':
functions.add(SceneStaticFunction(
deviceId: deviceId,
deviceName: '3 Gang Button Switch L-L',
deviceIcon: Assets.assetsIcons3GangSwitch,
icon: Assets.assetsLightCountdown,
operationName: 'Light 2 CountDown',
code: 'countdown_2',
functionValue: taskItem.functionValue,
operationalValues: [
SceneOperationalValue(icon: '', value: 0),
],
));
break;
case 'countdown_3':
functions.add(SceneStaticFunction(
deviceId: deviceId,
deviceName: '3 Gang Button Switch L-L',
deviceIcon: Assets.assetsIcons3GangSwitch,
icon: Assets.assetsLightCountdown,
operationName: 'Light 3 CountDown',
code: 'countdown_3',
functionValue: taskItem.functionValue,
operationalValues: [
SceneOperationalValue(icon: '', value: 0),
],
));
break;
case 'switch':
functions.add(SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Smart AC Thermostat - Grey - Model A',
deviceIcon: Assets.assetsIconsAC,
icon: Assets.assetsAcPower,
operationName: 'Power',
code: 'switch',
functionValue: taskItem.functionValue,
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcPower,
description: "ON",
value: true,
),
SceneOperationalValue(
icon: Assets.assetsAcPowerOFF,
description: "OFF",
value: false,
),
],
));
break;
case 'temp_set':
functions.add(SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Smart AC Thermostat - Grey - Model A',
deviceIcon: Assets.assetsIconsAC,
icon: Assets.assetsTempreture,
operationName: 'Set Temperature',
code: 'temp_set',
functionValue: taskItem.functionValue != null
? ((taskItem.functionValue / 10) as double).toInt()
: null,
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsCelsiusDegrees,
value: 0,
description: 'COOL TO',
),
],
));
break;
case 'mode':
functions.add(SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Smart AC Thermostat - Grey - Model A',
deviceIcon: Assets.assetsIconsAC,
icon: Assets.assetsFreezing,
operationName: 'Mode',
code: 'mode',
functionValue: taskItem.functionValue,
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcCooling,
description: AcValuesEnums.Cooling.name,
value: TempModes.cold.name,
),
SceneOperationalValue(
icon: Assets.assetsAcHeating,
description: AcValuesEnums.Heating.name,
value: TempModes.hot.name,
),
SceneOperationalValue(
icon: Assets.assetsFanSpeed,
description: AcValuesEnums.Ventilation.name,
value: TempModes.wind.name,
),
],
));
break;
case 'level':
functions.add(SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Smart AC Thermostat - Grey - Model A',
deviceIcon: Assets.assetsIconsAC,
icon: Assets.assetsFanSpeed,
operationName: 'Fan Speed',
code: 'level',
functionValue: taskItem.functionValue,
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsAcFanLow,
description: ValueACRange.LOW.name,
value: FanSpeeds.low.name,
),
SceneOperationalValue(
icon: Assets.assetsAcFanMiddle,
description: ValueACRange.MIDDLE.name,
value: FanSpeeds.middle.name,
),
SceneOperationalValue(
icon: Assets.assetsAcFanHigh,
description: ValueACRange.HIGH.name,
value: FanSpeeds.high.name,
),
SceneOperationalValue(
icon: Assets.assetsAcFanAuto,
description: ValueACRange.AUTO.name,
value: FanSpeeds.auto.name,
),
],
));
break;
case 'child_lock':
functions.add(SceneStaticFunction(
deviceId: deviceId,
deviceName: 'Smart AC Thermostat - Grey - Model A',
deviceIcon: Assets.assetsIconsAC,
icon: Assets.assetsChildLock,
operationName: 'Child Lock',
code: 'child_lock',
functionValue: taskItem.functionValue,
operationalValues: [
SceneOperationalValue(
icon: Assets.assetsSceneChildLock,
description: 'Lock',
value: true,
),
SceneOperationalValue(
icon: Assets.assetsSceneChildUnlock,
description: 'Unlock',
value: false,
),
],
));
break;
default:
}
return functions;
}
} }

View File

@ -47,9 +47,9 @@ class CreateSceneModel {
); );
} }
Map<String, dynamic> toMap() { Map<String, dynamic> toMap([String? sceneId]) {
return { return {
'unitUuid': unitUuid, if (sceneId != null) 'unitUuid': unitUuid,
'sceneName': sceneName, 'sceneName': sceneName,
'decisionExpr': decisionExpr, 'decisionExpr': decisionExpr,
'actions': actions.map((x) => x.toMap()).toList(), 'actions': actions.map((x) => x.toMap()).toList(),
@ -66,7 +66,7 @@ class CreateSceneModel {
); );
} }
String toJson() => json.encode(toMap()); String toJson([String? sceneId]) => json.encode(toMap(sceneId));
factory CreateSceneModel.fromJson(String source) => factory CreateSceneModel.fromJson(String source) =>
CreateSceneModel.fromMap(json.decode(source)); CreateSceneModel.fromMap(json.decode(source));

View File

@ -46,7 +46,9 @@ class DeviceFunctionsView extends StatelessWidget
actions: [ actions: [
TextButton( TextButton(
onPressed: () { onPressed: () {
context.read<CreateSceneBloc>().add(AddTaskEvent()); context
.read<CreateSceneBloc>()
.add(const AddTaskEvent(updateTaskListFromTemp: true));
Navigator.popUntil(context, (route) { Navigator.popUntil(context, (route) {
return route.settings.name == Routes.sceneTasksRoute; return route.settings.name == Routes.sceneTasksRoute;
}); });

View File

@ -64,7 +64,10 @@ class SceneTasksView extends StatelessWidget {
left: 40, left: 40,
child: SizedBox( child: SizedBox(
width: context.width * 0.8, width: context.width * 0.8,
child: const CreateSceneSaveButton(), child: CreateSceneSaveButton(
sceneName: sceneSettings.sceneName,
sceneId: sceneSettings.sceneId,
),
), ),
) )
], ],

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; 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/scene_bloc/scene_bloc.dart'; import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_bloc.dart';
import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_event.dart'; import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_event.dart';
import 'package:syncrow_app/features/scene/widgets/scene_view_widget/scene_grid_view.dart'; import 'package:syncrow_app/features/scene/widgets/scene_view_widget/scene_grid_view.dart';

View File

@ -31,16 +31,17 @@ class _AlertDialogFunctionsOperationsBodyState
final tempTaskList = context.read<CreateSceneBloc>().tempTasksList; final tempTaskList = context.read<CreateSceneBloc>().tempTasksList;
if (tempTaskList.isEmpty) { if (tempTaskList.isEmpty) {
context.read<CreateSceneBloc>().add(const ClearTempTaskListEvent()); context.read<CreateSceneBloc>().add(const ClearTempTaskListEvent());
} } else if (tempTaskList.isNotEmpty) {
for (var element in tempTaskList) {
for (var element in tempTaskList) { if (element.code == widget.functions[widget.index].code) {
if (element.code == widget.functions[widget.index].code) { groupValue = element.functionValue;
groupValue = element.functionValue; } else {
} else { context.read<CreateSceneBloc>().add(RemoveFromSelectedValueById(
context.read<CreateSceneBloc>().add(RemoveFromSelectedValueById( code: widget.functions[widget.index].code));
code: widget.functions[widget.index].code)); }
} }
} }
if (widget.functionValue != null) { if (widget.functionValue != null) {
setState(() { setState(() {
groupValue = widget.functionValue; groupValue = widget.functionValue;
@ -49,6 +50,7 @@ class _AlertDialogFunctionsOperationsBodyState
} }
dynamic groupValue; dynamic groupValue;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SingleChildScrollView( return SingleChildScrollView(

View File

@ -10,7 +10,11 @@ import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
class CreateSceneSaveButton extends StatefulWidget { class CreateSceneSaveButton extends StatefulWidget {
const CreateSceneSaveButton({ const CreateSceneSaveButton({
super.key, super.key,
required this.sceneName,
required this.sceneId,
}); });
final String sceneName;
final String sceneId;
@override @override
State<CreateSceneSaveButton> createState() => _CreateSceneSaveButtonState(); State<CreateSceneSaveButton> createState() => _CreateSceneSaveButtonState();
@ -22,7 +26,8 @@ class _CreateSceneSaveButtonState extends State<CreateSceneSaveButton>
@override @override
void initState() { void initState() {
sceneNameController = TextEditingController(); sceneNameController = TextEditingController(
text: widget.sceneName.isNotEmpty ? widget.sceneName : '');
super.initState(); super.initState();
} }
@ -59,39 +64,58 @@ class _CreateSceneSaveButtonState extends State<CreateSceneSaveButton>
}, },
builder: (context, state) { builder: (context, state) {
return DefaultButton( return DefaultButton(
onPressed: () { onPressed: widget.sceneName.isNotEmpty
context.customAlertDialog( ? () {
alertBody: Padding(
padding: const EdgeInsets.only(left: 8, right: 8, bottom: 8),
child: SizedBox(
height: 40,
child: SearchBar(
controller: sceneNameController,
elevation: WidgetStateProperty.all(0),
textStyle: WidgetStateProperty.all(context.bodyMedium),
hintStyle: WidgetStateProperty.all(
context.bodyMedium.copyWith(
fontSize: 14,
color: ColorsManager.secondaryTextColor),
),
hintText: 'Enter scene name',
backgroundColor:
WidgetStateProperty.all(ColorsManager.backgroundColor),
),
),
),
title: 'Scene Name',
onConfirm: () {
if (sceneNameController.text.isNotEmpty) {
final tasks = context.read<CreateSceneBloc>().tasksList; final tasks = context.read<CreateSceneBloc>().tasksList;
handleSaveButtonPress(context, sceneNameController, tasks); handleSaveButtonPress(
context,
sceneNameController,
tasks,
updateScene: true,
sceneId: widget.sceneId,
);
} }
}, : () {
); context.customAlertDialog(
}, alertBody: Padding(
padding:
const EdgeInsets.only(left: 8, right: 8, bottom: 8),
child: SizedBox(
height: 40,
child: SearchBar(
controller: sceneNameController,
elevation: WidgetStateProperty.all(0),
textStyle:
WidgetStateProperty.all(context.bodyMedium),
hintStyle: WidgetStateProperty.all(
context.bodyMedium.copyWith(
fontSize: 14,
color: ColorsManager.secondaryTextColor),
),
hintText: 'Enter scene name',
backgroundColor: WidgetStateProperty.all(
ColorsManager.backgroundColor),
),
),
),
title: 'Scene Name',
onConfirm: () {
if (sceneNameController.text.isNotEmpty) {
final tasks = context.read<CreateSceneBloc>().tasksList;
handleSaveButtonPress(
context,
sceneNameController,
tasks,
updateScene: false,
sceneId: widget.sceneId,
);
}
},
);
},
customButtonStyle: ButtonStyle( customButtonStyle: ButtonStyle(
backgroundColor: WidgetStateProperty.all<Color>( backgroundColor: WidgetStateProperty.all<Color>(
ColorsManager.primaryColorWithOpacity, ColorsManager.primaryColor,
), ),
), ),
isLoading: state is CreateSceneLoading, isLoading: state is CreateSceneLoading,

View File

@ -4,10 +4,10 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.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/helper/scene_logic_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_functions_body.dart';
import 'package:syncrow_app/features/scene/widgets/alert_dialogs/alert_dialog_temperature_body.dart';
import 'package:syncrow_app/features/scene/widgets/scene_list_tile.dart'; import 'package:syncrow_app/features/scene/widgets/scene_list_tile.dart';
import 'package:syncrow_app/features/shared_widgets/default_container.dart'; import 'package:syncrow_app/features/shared_widgets/default_container.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
@ -15,16 +15,17 @@ import 'package:syncrow_app/generated/assets.dart';
import 'package:syncrow_app/utils/context_extension.dart'; 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 ThenAddedTasksContainer extends StatelessWidget { class ThenAddedTasksContainer extends StatelessWidget
with SceneOperationsDataHelper, SceneLogicHelper {
ThenAddedTasksContainer({ ThenAddedTasksContainer({
super.key, super.key,
required this.taskList, required this.taskItem,
this.sceneId, this.sceneId,
this.index, this.index,
this.listOfSceneStaticFunction, this.listOfSceneStaticFunction,
}); });
final SceneStaticFunction taskList; final SceneStaticFunction taskItem;
String? sceneId; String? sceneId;
List<SceneStaticFunction>? listOfSceneStaticFunction; List<SceneStaticFunction>? listOfSceneStaticFunction;
int? index; int? index;
@ -32,43 +33,31 @@ class ThenAddedTasksContainer extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
String operationValue = ''; String operationValue = '';
if (taskList.code.contains('countdown')) { if (taskItem.code.contains('countdown')) {
final functionValue = final functionValue =
taskList.functionValue ?? taskList.operationalValues.first.value; taskItem.functionValue ?? taskItem.operationalValues.first.value;
final duration = final duration =
Duration(seconds: int.tryParse(functionValue.toString()) ?? 0); Duration(seconds: int.tryParse(functionValue.toString()) ?? 0);
operationValue = operationValue =
"${duration.inHours}h ${duration.inMinutes.remainder(60)}m "; "${duration.inHours}h ${duration.inMinutes.remainder(60)}m ";
} else { } else {
final functionValue = final functionValue =
taskList.functionValue ?? taskList.operationalValues.first.value; taskItem.functionValue ?? taskItem.operationalValues.first.value;
operationValue = functionValue.toString(); operationValue = functionValue.toString();
} }
return DefaultContainer( return DefaultContainer(
onTap: () { onTap: () async {
// List<SceneStaticFunction> functionOperation = [];
// if (sceneId == null) {
// functionOperation = getOperationsForOneFunction(
// taskItem: taskItem, deviceId: taskItem.deviceId);
// }
context.customAlertDialog( context.customAlertDialog(
alertBody: taskList.code == 'temp_set' alertBody: getTheCorrectDialogBody(
? AlertDialogTemperatureBody( taskItem,
index: index!, listOfSceneStaticFunction,
functions: listOfSceneStaticFunction ?? [], index,
functionValue: taskList.functionValue, ),
)
: (listOfSceneStaticFunction![index!]
.code
.contains('countdown') ||
listOfSceneStaticFunction![index!]
.code
.contains('presence_time'))
? AlertDialogCountdown(
durationValue:
listOfSceneStaticFunction![index!].functionValue,
functionValue: taskList.functionValue,
function: listOfSceneStaticFunction![index!],
)
: AlertDialogFunctionsOperationsBody(
index: index!,
functions: listOfSceneStaticFunction ?? [],
functionValue: taskList.functionValue),
title: listOfSceneStaticFunction![index!].operationName, title: listOfSceneStaticFunction![index!].operationName,
onConfirm: () { onConfirm: () {
// final selectedValue = context.read<CreateSceneBloc>().selectedValue; // final selectedValue = context.read<CreateSceneBloc>().selectedValue;
@ -89,7 +78,7 @@ class ThenAddedTasksContainer extends StatelessWidget {
}, },
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
child: Dismissible( child: Dismissible(
key: Key(taskList.uniqueCustomId.toString()), key: Key(taskItem.uniqueCustomId.toString()),
background: Container( background: Container(
padding: const EdgeInsets.only(right: 10), padding: const EdgeInsets.only(right: 10),
alignment: AlignmentDirectional.centerEnd, alignment: AlignmentDirectional.centerEnd,
@ -110,14 +99,14 @@ class ThenAddedTasksContainer extends StatelessWidget {
), ),
direction: DismissDirection.endToStart, direction: DismissDirection.endToStart,
onDismissed: (direction) { onDismissed: (direction) {
String removeFunctionById = taskList.uniqueCustomId; String removeFunctionById = taskItem.uniqueCustomId;
context context
.read<CreateSceneBloc>() .read<CreateSceneBloc>()
.add(RemoveTaskByIdEvent(taskId: removeFunctionById)); .add(RemoveTaskByIdEvent(taskId: removeFunctionById));
String removeFunction = String removeFunction =
"${taskList.operationName} with value ${taskList.operationalValues.first.value}"; "${taskItem.operationName} with value ${taskItem.operationalValues.first.value}";
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('$removeFunction removed')), SnackBar(content: Text('$removeFunction removed')),
@ -125,10 +114,10 @@ class ThenAddedTasksContainer extends StatelessWidget {
}, },
child: SceneListTile( child: SceneListTile(
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
assetPath: taskList.icon, assetPath: taskItem.icon,
iconsSize: 32, iconsSize: 32,
titleWidget: BodyMedium( titleWidget: BodyMedium(
text: taskList.deviceName, text: taskItem.deviceName,
style: context.bodyMedium.copyWith( style: context.bodyMedium.copyWith(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
@ -136,7 +125,7 @@ class ThenAddedTasksContainer extends StatelessWidget {
subtitleWidget: Row( subtitleWidget: Row(
children: [ children: [
BodyMedium( BodyMedium(
text: "${taskList.operationName}: ", text: "${taskItem.operationName}: ",
fontColor: ColorsManager.secondaryTextColor, fontColor: ColorsManager.secondaryTextColor,
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
), ),

View File

@ -50,70 +50,43 @@ class ThenDefaultContainer extends StatelessWidget {
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
), ),
const LightDivider(), const LightDivider(),
sceneId.isNotEmpty BlocBuilder<CreateSceneBloc, CreateSceneState>(
? BlocProvider( builder: (context, state) {
create: (context) => CreateSceneBloc() if (state is CreateSceneLoading) {
..add(FetchSceneTasksEvent(sceneId: sceneId)), return const Center(child: LinearProgressIndicator());
child: BlocBuilder<CreateSceneBloc, CreateSceneState>( }
builder: (context, state) { if (state is AddSceneTask) {
if (state is CreateSceneLoading) { final taskLists = state.tasksList;
return const Center(child: LinearProgressIndicator()); if (taskLists.isNotEmpty) {
} return ListView.builder(
if (state is AddSceneTask) { shrinkWrap: true,
final taskLists = state.tasksList; physics: const NeverScrollableScrollPhysics(),
if (taskLists.isNotEmpty) { itemCount: taskLists.length,
return ListView.builder( reverse: true,
shrinkWrap: true, itemBuilder: (context, index) {
physics: const NeverScrollableScrollPhysics(), return ThenAddedTasksContainer(
itemCount: taskLists.length, taskItem: taskLists[index],
itemBuilder: (context, index) {
return ThenAddedTasksContainer(
taskList: taskLists[index],
index: index,
listOfSceneStaticFunction: taskLists,
sceneId: sceneId,
);
},
);
}
return const SizedBox();
}
return const SizedBox();
},
))
: BlocBuilder<CreateSceneBloc, CreateSceneState>(
builder: (context, state) {
if (state is AddSceneTask) {
final taskLists = state.tasksList;
if (taskLists.isNotEmpty) {
return ListView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: taskLists.length,
itemBuilder: (context, index) {
return ThenAddedTasksContainer(
taskList: taskLists[index],
);
},
);
}
return SceneListTile(
titleString: '+ Add Task',
textAlign: TextAlign.center,
onPressed: () => context.customBottomSheet(
child: const CustomBottomSheetWidget(),
),
); );
} },
return SceneListTile( );
titleString: '+ Add Task', }
textAlign: TextAlign.center, return SceneListTile(
onPressed: () => context.customBottomSheet( titleString: '+ Add Task',
child: const CustomBottomSheetWidget(), textAlign: TextAlign.center,
), onPressed: () => context.customBottomSheet(
); child: const CustomBottomSheetWidget(),
}, ),
) );
}
return SceneListTile(
titleString: '+ Add Task',
textAlign: TextAlign.center,
onPressed: () => context.customBottomSheet(
child: const CustomBottomSheetWidget(),
),
);
},
)
], ],
), ),
); );

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_bloc.dart'; import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_bloc.dart';
import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_event.dart'; import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_event.dart';
import 'package:syncrow_app/features/scene/enum/create_scene_enum.dart'; import 'package:syncrow_app/features/scene/enum/create_scene_enum.dart';
@ -35,6 +36,8 @@ class SceneItem extends StatelessWidget {
sceneName: scene.name, sceneName: scene.name,
), ),
); );
BlocProvider.of<CreateSceneBloc>(context)
.add(FetchSceneTasksEvent(sceneId: scene.id));
}, },
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,

View File

@ -9,7 +9,8 @@ abstract class ApiEndpoints {
static const String deleteUser = '$baseUrl/authentication/user/delete/{id}'; static const String deleteUser = '$baseUrl/authentication/user/delete/{id}';
static const String sendOtp = '$baseUrl/authentication/user/send-otp'; static const String sendOtp = '$baseUrl/authentication/user/send-otp';
static const String verifyOtp = '$baseUrl/authentication/user/verify-otp'; static const String verifyOtp = '$baseUrl/authentication/user/verify-otp';
static const String forgetPassword = '$baseUrl/authentication/user/forget-password'; static const String forgetPassword =
'$baseUrl/authentication/user/forget-password';
////////////////////////////////////// Spaces /////////////////////////////////////// ////////////////////////////////////// Spaces ///////////////////////////////////////
@ -19,10 +20,12 @@ abstract class ApiEndpoints {
static const String addCommunityToUser = '$baseUrl/community/user'; static const String addCommunityToUser = '$baseUrl/community/user';
//GET //GET
static const String communityByUuid = '$baseUrl/community/{communityUuid}'; static const String communityByUuid = '$baseUrl/community/{communityUuid}';
static const String communityChild = '$baseUrl/community/child/{communityUuid}'; static const String communityChild =
'$baseUrl/community/child/{communityUuid}';
static const String communityUser = '$baseUrl/community/user/{userUuid}'; static const String communityUser = '$baseUrl/community/user/{userUuid}';
//PUT //PUT
static const String renameCommunity = '$baseUrl/community/rename/{communityUuid}'; static const String renameCommunity =
'$baseUrl/community/rename/{communityUuid}';
///Building Module ///Building Module
//POST //POST
@ -31,10 +34,12 @@ abstract class ApiEndpoints {
//GET //GET
static const String buildingByUuid = '$baseUrl/building/{buildingUuid}'; static const String buildingByUuid = '$baseUrl/building/{buildingUuid}';
static const String buildingChild = '$baseUrl/building/child/{buildingUuid}'; static const String buildingChild = '$baseUrl/building/child/{buildingUuid}';
static const String buildingParent = '$baseUrl/building/parent/{buildingUuid}'; static const String buildingParent =
'$baseUrl/building/parent/{buildingUuid}';
static const String buildingUser = '$baseUrl/building/user/{userUuid}'; static const String buildingUser = '$baseUrl/building/user/{userUuid}';
//PUT //PUT
static const String renameBuilding = '$baseUrl/building/rename/{buildingUuid}'; static const String renameBuilding =
'$baseUrl/building/rename/{buildingUuid}';
///Floor Module ///Floor Module
//POST //POST
@ -57,7 +62,8 @@ abstract class ApiEndpoints {
static const String unitChild = '$baseUrl/unit/child/'; static const String unitChild = '$baseUrl/unit/child/';
static const String unitParent = '$baseUrl/unit/parent/{unitUuid}'; static const String unitParent = '$baseUrl/unit/parent/{unitUuid}';
static const String unitUser = '$baseUrl/unit/user/'; static const String unitUser = '$baseUrl/unit/user/';
static const String invitationCode = '$baseUrl/unit/{unitUuid}/invitation-code'; static const String invitationCode =
'$baseUrl/unit/{unitUuid}/invitation-code';
static const String verifyInvitationCode = '$baseUrl/unit/user/verify-code'; static const String verifyInvitationCode = '$baseUrl/unit/user/verify-code';
//PUT //PUT
@ -80,7 +86,8 @@ abstract class ApiEndpoints {
static const String controlGroup = '$baseUrl/group/control'; static const String controlGroup = '$baseUrl/group/control';
//GET //GET
static const String groupBySpace = '$baseUrl/group/{unitUuid}'; static const String groupBySpace = '$baseUrl/group/{unitUuid}';
static const String devicesByGroupName = '$baseUrl/group/{unitUuid}/devices/{groupName}'; static const String devicesByGroupName =
'$baseUrl/group/{unitUuid}/devices/{groupName}';
static const String groupByUuid = '$baseUrl/group/{groupUuid}'; static const String groupByUuid = '$baseUrl/group/{groupUuid}';
//DELETE //DELETE
@ -92,15 +99,19 @@ abstract class ApiEndpoints {
static const String addDeviceToRoom = '$baseUrl/device/room'; static const String addDeviceToRoom = '$baseUrl/device/room';
static const String addDeviceToGroup = '$baseUrl/device/group'; static const String addDeviceToGroup = '$baseUrl/device/group';
static const String controlDevice = '$baseUrl/device/{deviceUuid}/control'; static const String controlDevice = '$baseUrl/device/{deviceUuid}/control';
static const String firmwareDevice = '$baseUrl/device/{deviceUuid}/firmware/{firmwareVersion}'; static const String firmwareDevice =
'$baseUrl/device/{deviceUuid}/firmware/{firmwareVersion}';
static const String getDevicesByUserId = '$baseUrl/device/user/{userId}'; static const String getDevicesByUserId = '$baseUrl/device/user/{userId}';
//GET //GET
static const String deviceByRoom = '$baseUrl/device/room'; static const String deviceByRoom = '$baseUrl/device/room';
static const String deviceByUuid = '$baseUrl/device/{deviceUuid}'; static const String deviceByUuid = '$baseUrl/device/{deviceUuid}';
static const String deviceFunctions = '$baseUrl/device/{deviceUuid}/functions'; static const String deviceFunctions =
static const String gatewayApi = '$baseUrl/device/gateway/{gatewayUuid}/devices'; '$baseUrl/device/{deviceUuid}/functions';
static const String deviceFunctionsStatus = '$baseUrl/device/{deviceUuid}/functions/status'; static const String gatewayApi =
'$baseUrl/device/gateway/{gatewayUuid}/devices';
static const String deviceFunctionsStatus =
'$baseUrl/device/{deviceUuid}/functions/status';
///Device Permission Module ///Device Permission Module
//POST //POST
@ -108,14 +119,16 @@ abstract class ApiEndpoints {
//GET //GET
static const String devicePermissionList = '$baseUrl/device-permission/list'; static const String devicePermissionList = '$baseUrl/device-permission/list';
//PUT //PUT
static const String editDevicePermission = '$baseUrl/device-permission/edit/{userId}'; static const String editDevicePermission =
'$baseUrl/device-permission/edit/{userId}';
static const String assignDeviceToRoom = '$baseUrl/device/room'; static const String assignDeviceToRoom = '$baseUrl/device/room';
/// Scene API //////////////////// /// Scene API ////////////////////
/// POST /// POST
static const String createScene = '$baseUrl/scene/tap-to-run'; static const String createScene = '$baseUrl/scene/tap-to-run';
static const String triggerScene = '$baseUrl/scene/tap-to-run/trigger/{sceneId}'; static const String triggerScene =
'$baseUrl/scene/tap-to-run/trigger/{sceneId}';
/// GET /// GET
static const String getUnitScenes = '$baseUrl/scene/tap-to-run/{unitUuid}'; static const String getUnitScenes = '$baseUrl/scene/tap-to-run/{unitUuid}';
@ -123,10 +136,11 @@ abstract class ApiEndpoints {
static const String getScene = '$baseUrl/scene/tap-to-run/details/{sceneId}'; static const String getScene = '$baseUrl/scene/tap-to-run/details/{sceneId}';
/// PUT /// PUT
static const String updateScene = '$baseUrl/scene/{sceneId}'; static const String updateScene = '$baseUrl/scene/tap-to-run/{sceneId}';
/// DELETE /// DELETE
static const String deleteScene = '$baseUrl/scene/tap-to-run/{sceneUuid}/{sceneId}'; static const String deleteScene =
'$baseUrl/scene/tap-to-run/{sceneUuid}/{sceneId}';
//////////////////////Door Lock ////////////////////// //////////////////////Door Lock //////////////////////
//online //online

View File

@ -71,7 +71,21 @@ class SceneApi {
} }
} }
//deleteScene
//updateScene //updateScene
static updateScene(CreateSceneModel createSceneModel, String sceneId) async {
try {
final response = await _httpService.put(
path: ApiEndpoints.updateScene.replaceAll('{sceneId}', sceneId),
body: createSceneModel.toJson(sceneId),
expectedResponseModel: (json) {
return json;
},
);
return response;
} catch (e) {
rethrow;
}
}
//deleteScene
} }