From 6a128f9558380014a9313d0a8cfea50c9977737f Mon Sep 17 00:00:00 2001 From: ashrafzarkanisala Date: Sat, 27 Jul 2024 17:26:44 +0300 Subject: [PATCH] finished bugs --- .../bloc/create_scene/create_scene_bloc.dart | 74 +++++++++--- lib/features/scene/model/scenes_model.dart | 35 ++---- .../scene/view/device_functions_view.dart | 6 +- lib/features/scene/view/scene_view.dart | 110 ++++++++++-------- .../if_then_containers/if_container.dart | 40 ++++--- .../if_then_containers/then_added_tasks.dart | 3 +- 6 files changed, 158 insertions(+), 110 deletions(-) diff --git a/lib/features/scene/bloc/create_scene/create_scene_bloc.dart b/lib/features/scene/bloc/create_scene/create_scene_bloc.dart index 4a2ee5b..bf519fa 100644 --- a/lib/features/scene/bloc/create_scene/create_scene_bloc.dart +++ b/lib/features/scene/bloc/create_scene/create_scene_bloc.dart @@ -58,6 +58,7 @@ class CreateSceneBloc extends Bloc emit(AddSceneTask( automationTasksList: automationTasksList, tasksList: tasksList, + condition: conditionRule, )); } else { final copyList = List.from(tempTasksList); @@ -67,6 +68,7 @@ class CreateSceneBloc extends Bloc emit(AddSceneTask( tasksList: tasksList, automationTasksList: automationTasksList, + condition: conditionRule, )); } } @@ -129,7 +131,10 @@ class CreateSceneBloc extends Bloc } emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); } void addToTempAutomationTaskList( @@ -186,7 +191,10 @@ class CreateSceneBloc extends Bloc event.deviceControlModel.value; } emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); } FutureOr _selectedValue( @@ -211,7 +219,10 @@ class CreateSceneBloc extends Bloc emit(SelectedTaskValueState(value: event.value)); emit(AddSceneTask( tasksList: List.from(tasksList), - automationTasksList: List.from(automationTasksList), + automationTasksList: List.from( + automationTasksList, + ), + condition: conditionRule, )); } @@ -223,7 +234,10 @@ class CreateSceneBloc extends Bloc if (element.uniqueCustomId == event.taskId) { automationTasksList.remove(element); emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); break; } } @@ -233,7 +247,10 @@ class CreateSceneBloc extends Bloc tasksList.remove(element); emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); break; } } @@ -248,7 +265,10 @@ class CreateSceneBloc extends Bloc if (element.uniqueCustomId == event.code) { automationTempTasksList.remove(element); emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); break; } } @@ -258,7 +278,10 @@ class CreateSceneBloc extends Bloc tempTasksList.remove(element); emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); break; } @@ -299,7 +322,10 @@ class CreateSceneBloc extends Bloc } catch (e) { emit(const CreateSceneError(message: 'Something went wrong')); emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); } } @@ -309,7 +335,10 @@ class CreateSceneBloc extends Bloc automationTasksList.clear(); tasksList.clear(); emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); } FutureOr _fetchSceneTasks( @@ -333,6 +362,7 @@ class CreateSceneBloc extends Bloc emit(AddSceneTask( automationTasksList: automationTasksList, tasksList: tasksList, + condition: conditionRule, )); } else { tasksList = List.from( @@ -340,6 +370,7 @@ class CreateSceneBloc extends Bloc actions: response.actions, isAutomation: false)); emit(AddSceneTask( tasksList: tasksList, + condition: conditionRule, )); } } else { @@ -358,12 +389,18 @@ class CreateSceneBloc extends Bloc automationSelectedValues.clear(); automationComparatorValues.clear(); emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); } else { tempTasksList.clear(); selectedValues.clear(); emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); } } @@ -376,14 +413,20 @@ class CreateSceneBloc extends Bloc automationComparatorValues.remove(event.code); emit(const SelectedTaskValueState(value: null)); emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); } } else { if (selectedValues.containsKey(event.code)) { selectedValues.remove(event.code); emit(const SelectedTaskValueState(value: null)); emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); } } } @@ -432,7 +475,10 @@ class CreateSceneBloc extends Bloc } } emit(AddSceneTask( - tasksList: tasksList, automationTasksList: automationTasksList)); + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + )); } FutureOr _selectConditionRule( diff --git a/lib/features/scene/model/scenes_model.dart b/lib/features/scene/model/scenes_model.dart index 10423cb..4c0066c 100644 --- a/lib/features/scene/model/scenes_model.dart +++ b/lib/features/scene/model/scenes_model.dart @@ -3,8 +3,8 @@ import 'dart:convert'; class ScenesModel { final String id; final String name; - final Status status; - final Type type; + final String status; + final String type; ScenesModel({ required this.id, @@ -20,36 +20,15 @@ class ScenesModel { factory ScenesModel.fromJson(Map json) => ScenesModel( id: json["id"], - name: json["name"], - status: statusValues.map[json["status"]]!, - type: typeValues.map[json["type"]]!, + name: json["name"] ?? '', + status: json["status"] ?? '', + type: json["type"] ?? '', ); Map toJson() => { "id": id, "name": name, - "status": statusValues.reverse[status], - "type": typeValues.reverse[type], + "status": status, + "type": type, }; } - -enum Status { ENABLE } - -final statusValues = EnumValues({"enable": Status.ENABLE}); - -enum Type { TAP_TO_RUN, automation } - -final typeValues = - EnumValues({"tap_to_run": Type.TAP_TO_RUN, "automation": Type.automation}); - -class EnumValues { - Map map; - late Map reverseMap; - - EnumValues(this.map); - - Map get reverse { - reverseMap = map.map((k, v) => MapEntry(v, k)); - return reverseMap; - } -} diff --git a/lib/features/scene/view/device_functions_view.dart b/lib/features/scene/view/device_functions_view.dart index 38e3ed3..ddb9090 100644 --- a/lib/features/scene/view/device_functions_view.dart +++ b/lib/features/scene/view/device_functions_view.dart @@ -65,7 +65,7 @@ class DeviceFunctionsView extends StatelessWidget ], leading: TextButton( onPressed: () { - if (isAutomation) { + // if (isAutomation) { final automationSelectedValue = context.read().automationSelectedValues; for (var element in device.functions) { @@ -77,7 +77,7 @@ class DeviceFunctionsView extends StatelessWidget code: element.code!, isAutomation: true)); } } - } else { + // } else { final selectedValue = context.read().selectedValues; for (var element in device.functions) { @@ -90,7 +90,7 @@ class DeviceFunctionsView extends StatelessWidget .add(RemoveFromSelectedValueById(code: element.code!)); } } - } + // } Navigator.pop(context); }, diff --git a/lib/features/scene/view/scene_view.dart b/lib/features/scene/view/scene_view.dart index c924cbc..f181c8b 100644 --- a/lib/features/scene/view/scene_view.dart +++ b/lib/features/scene/view/scene_view.dart @@ -9,7 +9,6 @@ import 'package:syncrow_app/features/scene/widgets/scene_view_widget/scene_grid_ import 'package:syncrow_app/features/scene/widgets/scene_view_widget/scene_header.dart'; import 'package:syncrow_app/features/shared_widgets/create_unit.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; -import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart'; import 'package:syncrow_app/utils/context_extension.dart'; import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; @@ -29,23 +28,24 @@ class SceneView extends StatelessWidget { if (state.success) { BlocProvider.of(context) .add(LoadScenes(HomeCubit.getInstance().selectedSpace!.id!)); - BlocProvider.of(context) - .add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!)); + BlocProvider.of(context).add( + LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!)); } } if (state is CreateSceneWithTasks) { if (state.success == true) { BlocProvider.of(context) .add(LoadScenes(HomeCubit.getInstance().selectedSpace!.id!)); - BlocProvider.of(context) - .add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!)); + BlocProvider.of(context).add( + LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!)); } } return BlocListener( listener: (context, state) { if (state is SceneTriggerSuccess) { context.showCustomSnackbar( - message: 'Scene ${state.sceneName} triggered successfully!'); + message: + 'Scene ${state.sceneName} triggered successfully!'); } }, child: HomeCubit.getInstance().spaces?.isEmpty ?? true @@ -81,49 +81,67 @@ class SceneView extends StatelessWidget { : Expanded( child: ListView( children: [ - ExpansionTile( - tilePadding: const EdgeInsets.symmetric(horizontal: 6), - initiallyExpanded: true, - iconColor: ColorsManager.grayColor, - title: const BodySmall(text: 'Tap to run routines'), - children: [ - scenes.isNotEmpty - ? SceneGrid( - scenes: scenes, - loadingSceneId: state.loadingSceneId, - disablePLayButton: false, - ) - : const Center( - child: BodyMedium( - text: 'No scenes have been added yet', + Theme( + data: ThemeData().copyWith( + dividerColor: Colors.transparent), + child: ExpansionTile( + tilePadding: + const EdgeInsets.symmetric( + horizontal: 6), + initiallyExpanded: true, + iconColor: ColorsManager.grayColor, + title: const BodyMedium( + text: 'Tap to run routines'), + children: [ + scenes.isNotEmpty + ? SceneGrid( + scenes: scenes, + loadingSceneId: + state.loadingSceneId, + disablePLayButton: false, + ) + : const Center( + child: BodyMedium( + text: + 'No scenes have been added yet', + ), ), - ), - const SizedBox( - height: 10, - ), - ], + const SizedBox( + height: 10, + ), + ], + ), ), - ExpansionTile( - initiallyExpanded: true, - iconColor: ColorsManager.grayColor, - tilePadding: const EdgeInsets.symmetric(horizontal: 6), - title: const BodySmall(text: 'Automation'), - children: [ - automationList.isNotEmpty - ? SceneGrid( - scenes: automationList, - loadingSceneId: state.loadingSceneId, - disablePLayButton: true, - ) - : const Center( - child: BodyMedium( - text: 'No automations have been added yet', + Theme( + data: ThemeData().copyWith( + dividerColor: Colors.transparent), + child: ExpansionTile( + initiallyExpanded: true, + iconColor: ColorsManager.grayColor, + tilePadding: + const EdgeInsets.symmetric( + horizontal: 6), + title: const BodyMedium( + text: 'Automation'), + children: [ + automationList.isNotEmpty + ? SceneGrid( + scenes: automationList, + loadingSceneId: + state.loadingSceneId, + disablePLayButton: true, + ) + : const Center( + child: BodyMedium( + text: + 'No automations have been added yet', + ), ), - ), - const SizedBox( - height: 10, - ), - ], + const SizedBox( + height: 10, + ), + ], + ), ), const SizedBox( height: 15, diff --git a/lib/features/scene/widgets/if_then_containers/if_container.dart b/lib/features/scene/widgets/if_then_containers/if_container.dart index ad7e14c..a68e660 100644 --- a/lib/features/scene/widgets/if_then_containers/if_container.dart +++ b/lib/features/scene/widgets/if_then_containers/if_container.dart @@ -27,6 +27,7 @@ class IFDefaultContainer extends StatelessWidget { @override Widget build(BuildContext context) { + final sceneType = context.read().sceneType; return DefaultContainer( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 2), child: Column( @@ -35,7 +36,6 @@ class IFDefaultContainer extends StatelessWidget { SceneListTile( leadingWidget: InkWell( onTap: () { - final sceneType = context.read().sceneType; if (sceneType.name == CreateSceneEnum.deviceStatusChanges.name) { context.customAlertDialog( @@ -80,24 +80,28 @@ class IFDefaultContainer extends StatelessWidget { color: ColorsManager.primaryTextColor, ), ), - BlocBuilder( - builder: (context, state) { - String conditionText = "When any condition is met"; - if (state is AddSceneTask) { - if (state.condition == 'or') { - conditionText = "When any condition is met"; - } else { - conditionText = "When all conditions are met"; + Visibility( + visible: sceneType.name == + CreateSceneEnum.deviceStatusChanges.name, + child: BlocBuilder( + builder: (context, state) { + String conditionText = "When any condition is met"; + if (state is AddSceneTask) { + if (state.condition == 'or') { + conditionText = "When any condition is met"; + } else { + conditionText = "When all conditions are met"; + } } - } - return SizedBox( - width: context.width * 0.6, - child: Row(children: [ - BodySmall(text: conditionText), - const Icon(Icons.keyboard_arrow_down) - ]), - ); - }, + return SizedBox( + width: context.width * 0.6, + child: Row(children: [ + BodySmall(text: conditionText), + const Icon(Icons.keyboard_arrow_down) + ]), + ); + }, + ), ), ], ), diff --git a/lib/features/scene/widgets/if_then_containers/then_added_tasks.dart b/lib/features/scene/widgets/if_then_containers/then_added_tasks.dart index 1e6384c..41595f8 100644 --- a/lib/features/scene/widgets/if_then_containers/then_added_tasks.dart +++ b/lib/features/scene/widgets/if_then_containers/then_added_tasks.dart @@ -43,7 +43,8 @@ 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')) { + } else if (taskItem.code.contains('temp_set') || + taskItem.code.contains('temp_current')) { if (taskItem.functionValue != null || taskItem.functionValue != 0) { operationValue = '${((taskItem.functionValue / 10) as double).round().toString()}°C';