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<RemoveFromSelectedValueById>(_removeFromSelectedValueById);
on<DeleteSceneEvent>(_deleteScene);
on<UpdateTaskEvent>(_updateTaskValue);
}
List<SceneStaticFunction> tasksList = [];
List<SceneStaticFunction> tempTasksList = [];
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);
tasksList.addAll(copyList);
tempTasksList.clear();
selectedValues.clear();
emit(TempHoldSceneTask(tempTasksList: tempTasksList));
// emit(TempHoldSceneTask(tempTasksList: tempTasksList));
emit(AddSceneTask(tasksList: tasksList));
}
@ -89,13 +91,15 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
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;
emit(SelectedTaskValueState(value: event.value));
emit(AddSceneTask(tasksList: tasksList));
}
FutureOr<void> _removeTaskById(RemoveTaskByIdEvent event, Emitter<CreateSceneState> emit) {
FutureOr<void> _removeTaskById(
RemoveTaskByIdEvent event, Emitter<CreateSceneState> emit) {
emit(CreateSceneLoading());
for (var element in tasksList) {
@ -114,7 +118,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
if (element.code == event.code) {
tempTasksList.remove(element);
emit(TempHoldSceneTask(tempTasksList: tempTasksList));
// emit(TempHoldSceneTask(tempTasksList: tempTasksList));
emit(AddSceneTask(tasksList: tasksList));
break;
@ -132,6 +136,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
if (response['success'] == true) {
tasksList.clear();
tempTasksList.clear();
selectedValues.clear();
emit(const CreateSceneWithTasks(success: true));
} else {
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();
emit(AddSceneTask(tasksList: tasksList));
}
@ -154,8 +160,8 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
try {
final response = await SceneApi.getSceneDetails(event.sceneId);
if (response.id.isNotEmpty) {
tasksList =
List<SceneStaticFunction>.from(getTaskListFunctionsFromApi(actions: response.actions));
tasksList = List<SceneStaticFunction>.from(
getTaskListFunctionsFromApi(actions: response.actions));
emit(AddSceneTask(
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();
selectedValues.clear();
emit(TempHoldSceneTask(tempTasksList: tempTasksList));
//emit(TempHoldSceneTask(tempTasksList: 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());
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) {
emit(const DeleteSceneSuccess(true));
} else {
@ -197,4 +206,17 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
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 {
final dynamic value;
final String code;

View File

@ -80,59 +80,23 @@ mixin SceneLogicHelper {
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') {
if (taskItem.code.contains('temp_set')) {
return AlertDialogTemperatureBody(
index: index!,
functions: listOfSceneStaticFunction ?? [],
taskItem: taskItem,
functionValue: taskItem.functionValue,
);
} else if (taskItem.code == 'countdown') {
} else if (taskItem.code.contains('countdown') ||
taskItem.deviceId.contains('delay')) {
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 ?? [],
taskItem: taskItem,
functionValue: taskItem.functionValue,
);
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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