solved dialog function re call bug

This commit is contained in:
ashrafzarkanisala
2024-07-03 23:23:59 +03:00
parent cef32e9bf3
commit 6450fdf584
9 changed files with 137 additions and 143 deletions

View File

@ -24,18 +24,20 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
on<RemoveTempTaskByIdEvent>(_removeTempTaskById); on<RemoveTempTaskByIdEvent>(_removeTempTaskById);
on<RemoveFromSelectedValueById>(_removeFromSelectedValueById); on<RemoveFromSelectedValueById>(_removeFromSelectedValueById);
on<DeleteSceneEvent>(_deleteScene); on<DeleteSceneEvent>(_deleteScene);
on<UpdateTaskEvent>(_updateTaskValue);
} }
List<SceneStaticFunction> tasksList = []; List<SceneStaticFunction> tasksList = [];
List<SceneStaticFunction> tempTasksList = []; List<SceneStaticFunction> tempTasksList = [];
final Map<String, dynamic> selectedValues = {}; final Map<String, dynamic> selectedValues = {};
FutureOr<void> _onAddSceneTask(AddTaskEvent event, Emitter<CreateSceneState> emit) { FutureOr<void> _onAddSceneTask(
AddTaskEvent event, Emitter<CreateSceneState> emit) {
final copyList = List<SceneStaticFunction>.from(tempTasksList); final copyList = List<SceneStaticFunction>.from(tempTasksList);
tasksList.addAll(copyList); tasksList.addAll(copyList);
tempTasksList.clear(); tempTasksList.clear();
selectedValues.clear(); selectedValues.clear();
emit(TempHoldSceneTask(tempTasksList: tempTasksList)); // emit(TempHoldSceneTask(tempTasksList: tempTasksList));
emit(AddSceneTask(tasksList: tasksList)); emit(AddSceneTask(tasksList: tasksList));
} }
@ -89,13 +91,15 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
emit(AddSceneTask(tasksList: tasksList)); emit(AddSceneTask(tasksList: tasksList));
} }
FutureOr<void> _selectedValue(SelectedValueEvent event, Emitter<CreateSceneState> emit) { FutureOr<void> _selectedValue(
SelectedValueEvent event, Emitter<CreateSceneState> emit) {
selectedValues[event.code] = event.value; selectedValues[event.code] = event.value;
emit(SelectedTaskValueState(value: event.value)); emit(SelectedTaskValueState(value: event.value));
emit(AddSceneTask(tasksList: tasksList)); emit(AddSceneTask(tasksList: tasksList));
} }
FutureOr<void> _removeTaskById(RemoveTaskByIdEvent event, Emitter<CreateSceneState> emit) { FutureOr<void> _removeTaskById(
RemoveTaskByIdEvent event, Emitter<CreateSceneState> emit) {
emit(CreateSceneLoading()); emit(CreateSceneLoading());
for (var element in tasksList) { for (var element in tasksList) {
@ -114,7 +118,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
if (element.code == event.code) { if (element.code == event.code) {
tempTasksList.remove(element); tempTasksList.remove(element);
emit(TempHoldSceneTask(tempTasksList: tempTasksList)); // emit(TempHoldSceneTask(tempTasksList: tempTasksList));
emit(AddSceneTask(tasksList: tasksList)); emit(AddSceneTask(tasksList: tasksList));
break; break;
@ -132,6 +136,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
if (response['success'] == true) { if (response['success'] == true) {
tasksList.clear(); tasksList.clear();
tempTasksList.clear(); tempTasksList.clear();
selectedValues.clear();
emit(const CreateSceneWithTasks(success: true)); emit(const CreateSceneWithTasks(success: true));
} else { } else {
emit(const CreateSceneError(message: 'Something went wrong')); emit(const CreateSceneError(message: 'Something went wrong'));
@ -142,7 +147,8 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
} }
} }
FutureOr<void> _clearTaskList(ClearTaskListEvent event, Emitter<CreateSceneState> emit) { FutureOr<void> _clearTaskList(
ClearTaskListEvent event, Emitter<CreateSceneState> emit) {
tasksList.clear(); tasksList.clear();
emit(AddSceneTask(tasksList: tasksList)); emit(AddSceneTask(tasksList: tasksList));
} }
@ -154,8 +160,8 @@ 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 = tasksList = List<SceneStaticFunction>.from(
List<SceneStaticFunction>.from(getTaskListFunctionsFromApi(actions: response.actions)); getTaskListFunctionsFromApi(actions: response.actions));
emit(AddSceneTask( emit(AddSceneTask(
tasksList: tasksList, tasksList: tasksList,
)); ));
@ -167,10 +173,11 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
} }
} }
FutureOr<void> _clearTempTaskList(ClearTempTaskListEvent event, Emitter<CreateSceneState> emit) { FutureOr<void> _clearTempTaskList(
ClearTempTaskListEvent event, Emitter<CreateSceneState> emit) {
tempTasksList.clear(); tempTasksList.clear();
selectedValues.clear(); selectedValues.clear();
emit(TempHoldSceneTask(tempTasksList: tempTasksList)); //emit(TempHoldSceneTask(tempTasksList: tempTasksList));
emit(AddSceneTask(tasksList: tempTasksList)); emit(AddSceneTask(tasksList: tempTasksList));
} }
@ -183,11 +190,13 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
} }
} }
FutureOr<void> _deleteScene(DeleteSceneEvent event, Emitter<CreateSceneState> emit) async { FutureOr<void> _deleteScene(
DeleteSceneEvent event, Emitter<CreateSceneState> emit) async {
emit(DeleteSceneLoading()); emit(DeleteSceneLoading());
try { try {
final response = await SceneApi.deleteScene(sceneId: event.sceneId, unitUuid: event.unitUuid); final response = await SceneApi.deleteScene(
sceneId: event.sceneId, unitUuid: event.unitUuid);
if (response == true) { if (response == true) {
emit(const DeleteSceneSuccess(true)); emit(const DeleteSceneSuccess(true));
} else { } else {
@ -197,4 +206,17 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
emit(const DeleteSceneError(message: 'Something went wrong')); emit(const DeleteSceneError(message: 'Something went wrong'));
} }
} }
FutureOr<void> _updateTaskValue(
UpdateTaskEvent event, Emitter<CreateSceneState> emit) {
for (var i = 0; i < tasksList.length; i++) {
if (tasksList[i].uniqueCustomId == event.taskId) {
tasksList[i] = tasksList[i].copyWith(
functionValue: event.newValue,
);
break;
}
}
emit(AddSceneTask(tasksList: tasksList));
}
} }

View File

@ -42,6 +42,14 @@ class TempHoldSceneTasksEvent extends CreateSceneEvent {
]; ];
} }
class UpdateTaskEvent extends CreateSceneEvent {
final String taskId;
final dynamic newValue;
const UpdateTaskEvent({required this.taskId, required this.newValue});
@override
List<Object> get props => [taskId, newValue];
}
class SelectedValueEvent extends CreateSceneEvent { class SelectedValueEvent extends CreateSceneEvent {
final dynamic value; final dynamic value;
final String code; final String code;

View File

@ -80,59 +80,23 @@ mixin SceneLogicHelper {
Widget getTheCorrectDialogBody( Widget getTheCorrectDialogBody(
SceneStaticFunction taskItem, SceneStaticFunction taskItem,
List<SceneStaticFunction>? listOfSceneStaticFunction,
int? index,
// List<SceneStaticFunction> functionOperation
) { ) {
bool checkTaskItemAndOperation() { if (taskItem.code.contains('temp_set')) {
return taskItem.code == 'temp_set' || taskItem.code == 'countdown'; return AlertDialogTemperatureBody(
} taskItem: taskItem,
functionValue: taskItem.functionValue,
bool checkListAndIndex() { );
if (listOfSceneStaticFunction == null || index == null) { } else if (taskItem.code.contains('countdown') ||
return false; taskItem.deviceId.contains('delay')) {
} return AlertDialogCountdown(
return listOfSceneStaticFunction[index].code == 'temp_set' || durationValue: taskItem.functionValue,
listOfSceneStaticFunction[index].code.contains('countdown') || functionValue: taskItem.functionValue,
listOfSceneStaticFunction[index].code.contains('presence_time'); function: taskItem,
} );
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( return AlertDialogFunctionsOperationsBody(
index: index ?? 0, taskItem: taskItem,
functions: listOfSceneStaticFunction ?? [],
functionValue: taskItem.functionValue, functionValue: taskItem.functionValue,
); );
} }

View File

@ -1171,9 +1171,7 @@ mixin SceneOperationsDataHelper {
icon: Assets.assetsTempreture, icon: Assets.assetsTempreture,
operationName: 'Set Temperature', operationName: 'Set Temperature',
code: 'temp_set', code: 'temp_set',
functionValue: executorProperty.functionValue != null functionValue: executorProperty.functionValue,
? ((executorProperty.functionValue! / 10) as double).toInt()
: null,
operationalValues: [ operationalValues: [
SceneOperationalValue( SceneOperationalValue(
icon: Assets.assetsCelsiusDegrees, icon: Assets.assetsCelsiusDegrees,
@ -1284,6 +1282,27 @@ mixin SceneOperationsDataHelper {
required SceneStaticFunction taskItem, required SceneStaticFunction taskItem,
}) { }) {
List<SceneStaticFunction> functions = []; List<SceneStaticFunction> functions = [];
if (deviceId.contains('delay')) {
functions.add(
SceneStaticFunction(
deviceId: taskItem.deviceId,
deviceName: 'delay',
deviceIcon: Assets.delay,
icon: Assets.delay,
operationName: 'delay',
functionValue: taskItem.functionValue,
code: '',
operationalValues: [
SceneOperationalValue(
icon: '',
description: "",
value: 0,
),
],
),
);
return functions;
}
switch (taskItem.code) { switch (taskItem.code) {
case 'sensitivity': case 'sensitivity':
functions.add( functions.add(
@ -1650,11 +1669,6 @@ mixin SceneOperationsDataHelper {
icon: Assets.assetsAcPowerOFF, icon: Assets.assetsAcPowerOFF,
description: "OFF", description: "OFF",
value: false), value: false),
SceneOperationalValue(
icon: Assets.assetsSceneRefresh,
description: "Reverse Switch",
value: true,
),
], ],
)); ));
break; break;
@ -1674,11 +1688,6 @@ mixin SceneOperationsDataHelper {
icon: Assets.assetsAcPowerOFF, icon: Assets.assetsAcPowerOFF,
description: "OFF", description: "OFF",
value: false), value: false),
SceneOperationalValue(
icon: Assets.assetsSceneRefresh,
description: "Reverse Switch",
value: true,
),
], ],
)); ));
break; break;
@ -1698,11 +1707,6 @@ mixin SceneOperationsDataHelper {
icon: Assets.assetsAcPowerOFF, icon: Assets.assetsAcPowerOFF,
description: "OFF", description: "OFF",
value: false), value: false),
SceneOperationalValue(
icon: Assets.assetsSceneRefresh,
description: "Reverse Switch",
value: true,
),
], ],
)); ));
break; break;

View File

@ -137,8 +137,7 @@ class DeviceFunctionsView extends StatelessWidget
context.customAlertDialog( context.customAlertDialog(
alertBody: functions[index].code == 'temp_set' alertBody: functions[index].code == 'temp_set'
? AlertDialogTemperatureBody( ? AlertDialogTemperatureBody(
index: index, taskItem: functions[index],
functions: functions,
functionValue: functionValues, functionValue: functionValues,
) )
: (functions[index] : (functions[index]
@ -156,8 +155,7 @@ class DeviceFunctionsView extends StatelessWidget
functionValue: functionValues, functionValue: functionValues,
) )
: AlertDialogFunctionsOperationsBody( : AlertDialogFunctionsOperationsBody(
index: index, taskItem: functions[index],
functions: functions,
functionValue: functionValues, functionValue: functionValues,
), ),
title: functions[index].operationName, title: functions[index].operationName,
@ -188,11 +186,6 @@ class DeviceFunctionsView extends StatelessWidget
final tempTaskList = context final tempTaskList = context
.read<CreateSceneBloc>() .read<CreateSceneBloc>()
.tempTasksList; .tempTasksList;
// if (tempTaskList.isEmpty) {
// context
// .read<CreateSceneBloc>()
// .add(const ClearTempTaskListEvent());
// } else {
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(
@ -203,7 +196,6 @@ class DeviceFunctionsView extends StatelessWidget
code: functions[index].code)); code: functions[index].code));
} }
} }
//}
Navigator.pop(context); Navigator.pop(context);
}, },
); );

View File

@ -9,14 +9,12 @@ import 'package:syncrow_app/features/scene/widgets/scene_list_tile.dart';
class AlertDialogFunctionsOperationsBody extends StatefulWidget { class AlertDialogFunctionsOperationsBody extends StatefulWidget {
AlertDialogFunctionsOperationsBody({ AlertDialogFunctionsOperationsBody({
super.key, super.key,
required this.functions,
required this.index,
this.functionValue, this.functionValue,
required this.taskItem,
}); });
final List<SceneStaticFunction> functions;
final int index;
dynamic functionValue; dynamic functionValue;
final SceneStaticFunction taskItem;
@override @override
State<AlertDialogFunctionsOperationsBody> createState() => State<AlertDialogFunctionsOperationsBody> createState() =>
@ -30,15 +28,14 @@ class _AlertDialogFunctionsOperationsBodyState
super.didChangeDependencies(); super.didChangeDependencies();
final tempTaskList = context.read<CreateSceneBloc>().tempTasksList; final tempTaskList = context.read<CreateSceneBloc>().tempTasksList;
if (tempTaskList.isNotEmpty) { 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.taskItem.code) {
groupValue = element.functionValue; groupValue = element.functionValue;
} else { } else {
context.read<CreateSceneBloc>().add(RemoveFromSelectedValueById( context
code: widget.functions[widget.index].code)); .read<CreateSceneBloc>()
.add(RemoveFromSelectedValueById(code: widget.taskItem.code));
} }
} }
} }
@ -58,7 +55,7 @@ class _AlertDialogFunctionsOperationsBodyState
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
...widget.functions[widget.index].operationalValues.map( ...widget.taskItem.operationalValues.map(
(operation) => BlocBuilder<CreateSceneBloc, CreateSceneState>( (operation) => BlocBuilder<CreateSceneBloc, CreateSceneState>(
builder: (context, state) { builder: (context, state) {
return SceneListTile( return SceneListTile(
@ -79,8 +76,7 @@ class _AlertDialogFunctionsOperationsBodyState
groupValue = value; groupValue = value;
}); });
context.read<CreateSceneBloc>().add(SelectedValueEvent( context.read<CreateSceneBloc>().add(SelectedValueEvent(
value: value!, value: value!, code: widget.taskItem.code));
code: widget.functions[widget.index].code));
}, },
), ),
onPressed: () { onPressed: () {
@ -88,8 +84,7 @@ class _AlertDialogFunctionsOperationsBodyState
groupValue = operation.value; groupValue = operation.value;
}); });
context.read<CreateSceneBloc>().add(SelectedValueEvent( context.read<CreateSceneBloc>().add(SelectedValueEvent(
value: groupValue, value: groupValue, code: widget.taskItem.code));
code: widget.functions[widget.index].code));
}, },
); );
}, },

View File

@ -14,13 +14,15 @@ import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
class AlertDialogTemperatureBody extends StatefulWidget { class AlertDialogTemperatureBody extends StatefulWidget {
AlertDialogTemperatureBody({ AlertDialogTemperatureBody({
super.key, super.key,
required this.index, //required this.index,
required this.functions, // required this.functions,
this.functionValue, this.functionValue,
required this.taskItem,
}); });
final List<SceneStaticFunction> functions; //final List<SceneStaticFunction> functions;
final int index; // final int index;
final SceneStaticFunction taskItem;
dynamic functionValue; dynamic functionValue;
@override @override
@ -36,11 +38,12 @@ class _AlertDialogTemperatureBodyState
final tempTaskList = context.read<CreateSceneBloc>().tempTasksList; final tempTaskList = context.read<CreateSceneBloc>().tempTasksList;
for (var element in tempTaskList) { for (var element in tempTaskList) {
if (element.code == widget.functions[widget.index].code) { if (element.code == widget.taskItem.code) {
temperature = element.functionValue; temperature = element.functionValue;
} else { } else {
context.read<CreateSceneBloc>().add(RemoveFromSelectedValueById( context
code: widget.functions[widget.index].code)); .read<CreateSceneBloc>()
.add(RemoveFromSelectedValueById(code: widget.taskItem.code));
} }
} }
if (widget.functionValue != null) { if (widget.functionValue != null) {
@ -63,8 +66,9 @@ class _AlertDialogTemperatureBodyState
} }
}); });
context.read<CreateSceneBloc>().add(SelectedValueEvent( context.read<CreateSceneBloc>().add(SelectedValueEvent(
value: temperature * 10, value: temperature * 10,
code: widget.functions[widget.index].code)); code: widget.taskItem.code,
));
}, },
icon: const Icon( icon: const Icon(
Icons.remove, Icons.remove,
@ -94,7 +98,7 @@ class _AlertDialogTemperatureBodyState
], ],
), ),
subtitle: BodyLarge( subtitle: BodyLarge(
text: widget.functions[widget.index].operationalValues[0].description text: widget.taskItem.operationalValues[0].description
.toString(), .toString(),
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
@ -107,7 +111,7 @@ class _AlertDialogTemperatureBodyState
}); });
context.read<CreateSceneBloc>().add(SelectedValueEvent( context.read<CreateSceneBloc>().add(SelectedValueEvent(
value: temperature * 10, value: temperature * 10,
code: widget.functions[widget.index].code)); code: widget.taskItem.code));
}, },
icon: const Icon( icon: const Icon(
Icons.add, Icons.add,

View File

@ -130,9 +130,7 @@ class CustomBottomSheetWidget extends StatelessWidget {
}, },
onDismiss: () { onDismiss: () {
final tempTaskList = context.read<CreateSceneBloc>().tempTasksList; final tempTaskList = context.read<CreateSceneBloc>().tempTasksList;
// if (tempTaskList.isNotEmpty) {
// context.read<CreateSceneBloc>().add(const ClearTempTaskListEvent());
// } else {
for (var element in tempTaskList) { for (var element in tempTaskList) {
if (element.code == functions[0].code) { if (element.code == functions[0].code) {
context context

View File

@ -22,16 +22,15 @@ class ThenAddedTasksContainer extends StatelessWidget
required this.taskItem, required this.taskItem,
this.sceneId, this.sceneId,
this.index, this.index,
this.listOfSceneStaticFunction,
}); });
final SceneStaticFunction taskItem; final SceneStaticFunction taskItem;
String? sceneId; String? sceneId;
List<SceneStaticFunction>? listOfSceneStaticFunction;
int? index; int? index;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final createSceneBloc = context.read<CreateSceneBloc>();
String operationValue = ''; String operationValue = '';
if (taskItem.code.contains('countdown') || if (taskItem.code.contains('countdown') ||
taskItem.deviceId.contains('delay')) { taskItem.deviceId.contains('delay')) {
@ -41,38 +40,46 @@ class ThenAddedTasksContainer extends StatelessWidget
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 if (taskItem.code.contains('temp_set')) {
if (taskItem.functionValue != null || taskItem.functionValue != 0) {
operationValue =
'${((taskItem.functionValue / 10) as double).round().toString()}°C';
} else {
operationValue = '0°C';
}
} else { } else {
final functionValue = final functionValue =
taskItem.functionValue ?? taskItem.operationalValues.first.value; taskItem.functionValue ?? taskItem.operationalValues.first.value;
operationValue = functionValue.toString(); operationValue = functionValue.toString();
} }
return DefaultContainer( return DefaultContainer(
onTap: () async { onTap: () {
// List<SceneStaticFunction> functionOperation = []; List<SceneStaticFunction> functionOperation = [];
// if (sceneId == null) {
// functionOperation = getOperationsForOneFunction( /// get the task functions
// taskItem: taskItem, deviceId: taskItem.deviceId); functionOperation = List.from(getOperationsForOneFunction(
// } taskItem: taskItem, deviceId: taskItem.deviceId));
/// show alert dialog based on type
context.customAlertDialog( context.customAlertDialog(
alertBody: getTheCorrectDialogBody( alertBody: getTheCorrectDialogBody(functionOperation.first),
taskItem, title: functionOperation.first.operationName,
listOfSceneStaticFunction,
index,
),
title: listOfSceneStaticFunction![index!].operationName,
onConfirm: () { onConfirm: () {
// final selectedValue = context.read<CreateSceneBloc>().selectedValue; final savedCode = functionOperation.first.deviceId.contains('delay')
// context.read<CreateSceneBloc>().add(TempHoldSceneTasksEvent( ? 'delay'
// deviceControlModel: DeviceControlModel( : functionOperation.first.code;
// deviceId: device.uuid, final selectedValue = createSceneBloc.selectedValues[savedCode];
// code: functions[index].code,
// value: selectedValue, try {
// ), createSceneBloc.add(
// deviceId: device.uuid ?? '', UpdateTaskEvent(
// operation: functions[index].operationName, newValue: selectedValue,
// icon: device.icon ?? '', taskId: taskItem.uniqueCustomId,
// deviceName: device.name ?? '', ),
// )); );
} catch (e) {
debugPrint('Error adding UpdateTaskEvent: $e');
}
Navigator.pop(context); Navigator.pop(context);
}, },
); );