From 26f50d59ddebf12adf52a3ca963b40c98ed5b633 Mon Sep 17 00:00:00 2001 From: Abdullah Alassaf Date: Thu, 5 Dec 2024 11:19:22 +0300 Subject: [PATCH] Bug fixes --- .../bloc/routine_bloc/routine_bloc.dart | 20 +-- .../routiens/widgets/then_container.dart | 116 +++++++----------- 2 files changed, 56 insertions(+), 80 deletions(-) diff --git a/lib/pages/routiens/bloc/routine_bloc/routine_bloc.dart b/lib/pages/routiens/bloc/routine_bloc/routine_bloc.dart index c1f3b39d..89781032 100644 --- a/lib/pages/routiens/bloc/routine_bloc/routine_bloc.dart +++ b/lib/pages/routiens/bloc/routine_bloc/routine_bloc.dart @@ -1050,7 +1050,9 @@ class RoutineBloc extends Bloc { final automationDetails = await SceneApi.getAutomationDetails(event.automationId); - final Map> deviceCards = {}; + final Map> deviceIfCards = {}; + final Map> deviceThenCards = {}; + final Map> updatedFunctions = Map>.from(state.selectedFunctions); @@ -1066,8 +1068,8 @@ class RoutineBloc extends Bloc { final deviceId = condition.entityId; - if (!deviceCards.containsKey(deviceId)) { - deviceCards[deviceId] = { + if (!deviceIfCards.containsKey(deviceId)) { + deviceIfCards[deviceId] = { 'entityId': condition.entityId, 'deviceId': condition.entityId, 'uniqueCustomId': const Uuid().v4(), @@ -1080,7 +1082,7 @@ class RoutineBloc extends Bloc { }; } - final cardData = deviceCards[deviceId]!; + final cardData = deviceIfCards[deviceId]!; final uniqueCustomId = cardData['uniqueCustomId'].toString(); if (!updatedFunctions.containsKey(uniqueCustomId)) { @@ -1117,8 +1119,8 @@ class RoutineBloc extends Bloc { final deviceId = action.actionExecutor == 'delay' ? '${action.entityId}_delay' : action.entityId; - if (!deviceCards.containsKey(deviceId)) { - deviceCards[deviceId] = { + if (!deviceThenCards.containsKey(deviceId)) { + deviceThenCards[deviceId] = { 'entityId': action.entityId, 'deviceId': action.actionExecutor == 'delay' ? 'delay' : action.entityId, 'uniqueCustomId': const Uuid().v4(), @@ -1143,7 +1145,7 @@ class RoutineBloc extends Bloc { }; } - final cardData = deviceCards[deviceId]!; + final cardData = deviceThenCards[deviceId]!; final uniqueCustomId = cardData['uniqueCustomId'].toString(); if (!updatedFunctions.containsKey(uniqueCustomId)) { @@ -1192,8 +1194,8 @@ class RoutineBloc extends Bloc { } } - final ifItems = deviceCards.values.where((card) => card['type'] == 'condition').toList(); - final thenItems = deviceCards.values + final ifItems = deviceIfCards.values.where((card) => card['type'] == 'condition').toList(); + final thenItems = deviceThenCards.values .where((card) => card['type'] == 'action' || card['type'] == 'automation' || card['type'] == 'scene') .toList(); diff --git a/lib/pages/routiens/widgets/then_container.dart b/lib/pages/routiens/widgets/then_container.dart index 8a12e443..4746561a 100644 --- a/lib/pages/routiens/widgets/then_container.dart +++ b/lib/pages/routiens/widgets/then_container.dart @@ -26,9 +26,7 @@ class ThenContainer extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Text('THEN', - style: TextStyle( - fontSize: 18, fontWeight: FontWeight.bold)), + const Text('THEN', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), const SizedBox(height: 16), state.isLoading && state.isUpdate == true ? const Center( @@ -41,17 +39,12 @@ class ThenContainer extends StatelessWidget { state.thenItems.length, (index) => GestureDetector( onTap: () async { - if (state.thenItems[index] - ['deviceId'] == - 'delay') { - final result = await DelayHelper - .showDelayPickerDialog(context, - state.thenItems[index]); + if (state.thenItems[index]['deviceId'] == 'delay') { + final result = await DelayHelper.showDelayPickerDialog( + context, state.thenItems[index]); if (result != null) { - context - .read() - .add(AddToThenContainer({ + context.read().add(AddToThenContainer({ ...state.thenItems[index], 'imagePath': Assets.delay, 'title': 'Delay', @@ -60,79 +53,58 @@ class ThenContainer extends StatelessWidget { return; } - if (state.thenItems[index]['type'] == - 'automation') { + if (state.thenItems[index]['type'] == 'automation') { final result = await showDialog( context: context, - builder: (BuildContext context) => - AutomationDialog( + builder: (BuildContext context) => AutomationDialog( automationName: - state.thenItems[index] - ['name'] ?? - 'Automation', + state.thenItems[index]['name'] ?? 'Automation', automationId: - state.thenItems[index] - ['deviceId'] ?? - '', - uniqueCustomId: - state.thenItems[index] - ['uniqueCustomId'], + state.thenItems[index]['deviceId'] ?? '', + uniqueCustomId: state.thenItems[index] + ['uniqueCustomId'], ), ); if (result != null) { - context - .read() - .add(AddToThenContainer({ + context.read().add(AddToThenContainer({ ...state.thenItems[index], - 'imagePath': - Assets.automation, - 'title': - state.thenItems[index] - ['name'] ?? - state.thenItems[index] - ['title'], + 'imagePath': Assets.automation, + 'title': state.thenItems[index]['name'] ?? + state.thenItems[index]['title'], })); } return; } - final result = await DeviceDialogHelper - .showDeviceDialog( - context, state.thenItems[index], - removeComparetors: true); + final result = await DeviceDialogHelper.showDeviceDialog( + context, state.thenItems[index], + removeComparetors: true); if (result != null) { - context.read().add( - AddToThenContainer( - state.thenItems[index])); + context + .read() + .add(AddToThenContainer(state.thenItems[index])); } else if (!['AC', '1G', '2G', '3G'] - .contains(state.thenItems[index] - ['productType'])) { - context.read().add( - AddToThenContainer( - state.thenItems[index])); + .contains(state.thenItems[index]['productType'])) { + context + .read() + .add(AddToThenContainer(state.thenItems[index])); } }, child: DraggableCard( - imagePath: state.thenItems[index] - ['imagePath'] ?? - '', - title: state.thenItems[index] - ['title'] ?? - '', + imagePath: state.thenItems[index]['imagePath'] ?? '', + title: state.thenItems[index]['title'] ?? '', deviceData: state.thenItems[index], - padding: const EdgeInsets.symmetric( - horizontal: 4, vertical: 8), + padding: + const EdgeInsets.symmetric(horizontal: 4, vertical: 8), isFromThen: true, isFromIf: false, onRemove: () { - context.read().add( - RemoveDragCard( - index: index, - isFromThen: true, - key: state.thenItems[index] - ['uniqueCustomId'])); + context.read().add(RemoveDragCard( + index: index, + isFromThen: true, + key: state.thenItems[index]['uniqueCustomId'])); }, ), ))), @@ -151,9 +123,14 @@ class ThenContainer extends StatelessWidget { return; } + if (state.automationId == mutableData['deviceId'] || + state.sceneId == mutableData['deviceId']) { + return; + } + if (mutableData['type'] == 'automation') { - int index = state.thenItems.indexWhere( - (item) => item['deviceId'] == mutableData['deviceId']); + int index = + state.thenItems.indexWhere((item) => item['deviceId'] == mutableData['deviceId']); if (index != -1) { return; } @@ -178,8 +155,8 @@ class ThenContainer extends StatelessWidget { } if (mutableData['type'] == 'tap_to_run' && state.isAutomation) { - int index = state.thenItems.indexWhere( - (item) => item['deviceId'] == mutableData['deviceId']); + int index = + state.thenItems.indexWhere((item) => item['deviceId'] == mutableData['deviceId']); if (index != -1) { return; } @@ -197,8 +174,7 @@ class ThenContainer extends StatelessWidget { } if (mutableData['deviceId'] == 'delay') { - final result = - await DelayHelper.showDelayPickerDialog(context, mutableData); + final result = await DelayHelper.showDelayPickerDialog(context, mutableData); if (result != null) { context.read().add(AddToThenContainer({ @@ -210,13 +186,11 @@ class ThenContainer extends StatelessWidget { return; } - final result = await DeviceDialogHelper.showDeviceDialog( - context, mutableData, + final result = await DeviceDialogHelper.showDeviceDialog(context, mutableData, removeComparetors: true); if (result != null) { context.read().add(AddToThenContainer(mutableData)); - } else if (!['AC', '1G', '2G', '3G'] - .contains(mutableData['productType'])) { + } else if (!['AC', '1G', '2G', '3G'].contains(mutableData['productType'])) { context.read().add(AddToThenContainer(mutableData)); } },