finished bugs

This commit is contained in:
ashrafzarkanisala
2024-07-27 17:26:44 +03:00
parent 5eee0a2bfd
commit 6a128f9558
6 changed files with 158 additions and 110 deletions

View File

@ -58,6 +58,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
emit(AddSceneTask(
automationTasksList: automationTasksList,
tasksList: tasksList,
condition: conditionRule,
));
} else {
final copyList = List<SceneStaticFunction>.from(tempTasksList);
@ -67,6 +68,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
emit(AddSceneTask(
tasksList: tasksList,
automationTasksList: automationTasksList,
condition: conditionRule,
));
}
}
@ -129,7 +131,10 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
}
emit(AddSceneTask(
tasksList: tasksList, automationTasksList: automationTasksList));
tasksList: tasksList,
automationTasksList: automationTasksList,
condition: conditionRule,
));
}
void addToTempAutomationTaskList(
@ -186,7 +191,10 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
event.deviceControlModel.value;
}
emit(AddSceneTask(
tasksList: tasksList, automationTasksList: automationTasksList));
tasksList: tasksList,
automationTasksList: automationTasksList,
condition: conditionRule,
));
}
FutureOr<void> _selectedValue(
@ -211,7 +219,10 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
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<CreateSceneEvent, CreateSceneState>
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<CreateSceneEvent, CreateSceneState>
tasksList.remove(element);
emit(AddSceneTask(
tasksList: tasksList, automationTasksList: automationTasksList));
tasksList: tasksList,
automationTasksList: automationTasksList,
condition: conditionRule,
));
break;
}
}
@ -248,7 +265,10 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
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<CreateSceneEvent, CreateSceneState>
tempTasksList.remove(element);
emit(AddSceneTask(
tasksList: tasksList, automationTasksList: automationTasksList));
tasksList: tasksList,
automationTasksList: automationTasksList,
condition: conditionRule,
));
break;
}
@ -299,7 +322,10 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
} 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<CreateSceneEvent, CreateSceneState>
automationTasksList.clear();
tasksList.clear();
emit(AddSceneTask(
tasksList: tasksList, automationTasksList: automationTasksList));
tasksList: tasksList,
automationTasksList: automationTasksList,
condition: conditionRule,
));
}
FutureOr<void> _fetchSceneTasks(
@ -333,6 +362,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
emit(AddSceneTask(
automationTasksList: automationTasksList,
tasksList: tasksList,
condition: conditionRule,
));
} else {
tasksList = List<SceneStaticFunction>.from(
@ -340,6 +370,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
actions: response.actions, isAutomation: false));
emit(AddSceneTask(
tasksList: tasksList,
condition: conditionRule,
));
}
} else {
@ -358,12 +389,18 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
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<CreateSceneEvent, CreateSceneState>
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<CreateSceneEvent, CreateSceneState>
}
}
emit(AddSceneTask(
tasksList: tasksList, automationTasksList: automationTasksList));
tasksList: tasksList,
automationTasksList: automationTasksList,
condition: conditionRule,
));
}
FutureOr<void> _selectConditionRule(

View File

@ -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<String, dynamic> 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<String, dynamic> 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<T> {
Map<String, T> map;
late Map<T, String> reverseMap;
EnumValues(this.map);
Map<T, String> get reverse {
reverseMap = map.map((k, v) => MapEntry(v, k));
return reverseMap;
}
}

View File

@ -65,7 +65,7 @@ class DeviceFunctionsView extends StatelessWidget
],
leading: TextButton(
onPressed: () {
if (isAutomation) {
// if (isAutomation) {
final automationSelectedValue =
context.read<CreateSceneBloc>().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<CreateSceneBloc>().selectedValues;
for (var element in device.functions) {
@ -90,7 +90,7 @@ class DeviceFunctionsView extends StatelessWidget
.add(RemoveFromSelectedValueById(code: element.code!));
}
}
}
// }
Navigator.pop(context);
},

View File

@ -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<SceneBloc>(context)
.add(LoadScenes(HomeCubit.getInstance().selectedSpace!.id!));
BlocProvider.of<SceneBloc>(context)
.add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!));
BlocProvider.of<SceneBloc>(context).add(
LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!));
}
}
if (state is CreateSceneWithTasks) {
if (state.success == true) {
BlocProvider.of<SceneBloc>(context)
.add(LoadScenes(HomeCubit.getInstance().selectedSpace!.id!));
BlocProvider.of<SceneBloc>(context)
.add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!));
BlocProvider.of<SceneBloc>(context).add(
LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!));
}
}
return BlocListener<SceneBloc, SceneState>(
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,21 +81,29 @@ class SceneView extends StatelessWidget {
: Expanded(
child: ListView(
children: [
ExpansionTile(
tilePadding: const EdgeInsets.symmetric(horizontal: 6),
Theme(
data: ThemeData().copyWith(
dividerColor: Colors.transparent),
child: ExpansionTile(
tilePadding:
const EdgeInsets.symmetric(
horizontal: 6),
initiallyExpanded: true,
iconColor: ColorsManager.grayColor,
title: const BodySmall(text: 'Tap to run routines'),
title: const BodyMedium(
text: 'Tap to run routines'),
children: [
scenes.isNotEmpty
? SceneGrid(
scenes: scenes,
loadingSceneId: state.loadingSceneId,
loadingSceneId:
state.loadingSceneId,
disablePLayButton: false,
)
: const Center(
child: BodyMedium(
text: 'No scenes have been added yet',
text:
'No scenes have been added yet',
),
),
const SizedBox(
@ -103,21 +111,30 @@ class SceneView extends StatelessWidget {
),
],
),
ExpansionTile(
),
Theme(
data: ThemeData().copyWith(
dividerColor: Colors.transparent),
child: ExpansionTile(
initiallyExpanded: true,
iconColor: ColorsManager.grayColor,
tilePadding: const EdgeInsets.symmetric(horizontal: 6),
title: const BodySmall(text: 'Automation'),
tilePadding:
const EdgeInsets.symmetric(
horizontal: 6),
title: const BodyMedium(
text: 'Automation'),
children: [
automationList.isNotEmpty
? SceneGrid(
scenes: automationList,
loadingSceneId: state.loadingSceneId,
loadingSceneId:
state.loadingSceneId,
disablePLayButton: true,
)
: const Center(
child: BodyMedium(
text: 'No automations have been added yet',
text:
'No automations have been added yet',
),
),
const SizedBox(
@ -125,6 +142,7 @@ class SceneView extends StatelessWidget {
),
],
),
),
const SizedBox(
height: 15,
),

View File

@ -27,6 +27,7 @@ class IFDefaultContainer extends StatelessWidget {
@override
Widget build(BuildContext context) {
final sceneType = context.read<CreateSceneBloc>().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<CreateSceneBloc>().sceneType;
if (sceneType.name ==
CreateSceneEnum.deviceStatusChanges.name) {
context.customAlertDialog(
@ -80,7 +80,10 @@ class IFDefaultContainer extends StatelessWidget {
color: ColorsManager.primaryTextColor,
),
),
BlocBuilder<CreateSceneBloc, CreateSceneState>(
Visibility(
visible: sceneType.name ==
CreateSceneEnum.deviceStatusChanges.name,
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(
builder: (context, state) {
String conditionText = "When any condition is met";
if (state is AddSceneTask) {
@ -99,6 +102,7 @@ class IFDefaultContainer extends StatelessWidget {
);
},
),
),
],
),
),

View File

@ -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';