Implemented tab to run setting

This commit is contained in:
Abdullah Alassaf
2024-10-28 16:45:59 +03:00
parent 20fdfdde87
commit 3d56f33ec3
18 changed files with 734 additions and 718 deletions

View File

@ -0,0 +1,23 @@
<svg width="35" height="36" viewBox="0 0 35 36" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.66933 30.6933C5.53419 30.6933 5.39898 30.6418 5.29581 30.5386C5.08955 30.3323 5.08955 29.9979 5.29581 29.7917L13.1989 21.8886C13.4052 21.6823 13.7396 21.6823 13.9459 21.8886C14.1521 22.0949 14.1521 22.4293 13.9459 22.6355L6.04286 30.5386C5.93969 30.6418 5.80448 30.6933 5.66933 30.6933Z" fill="#E9EDF1"/>
<path d="M20.7589 15.6035C20.6238 15.6035 20.4886 15.552 20.3854 15.4488C20.1791 15.2425 20.1791 14.9081 20.3854 14.7019L28.9575 6.1298C29.1639 5.92353 29.4982 5.92353 29.7045 6.1298C29.9108 6.33607 29.9108 6.6705 29.7045 6.8767L21.1325 15.4488C21.0293 15.5519 20.8941 15.6035 20.7589 15.6035Z" fill="#E9EDF1"/>
<path d="M29.3309 30.6232C29.1958 30.6232 29.0605 30.5716 28.9574 30.4684L23.4486 24.9597C23.2424 24.7534 23.2424 24.419 23.4486 24.2128C23.655 24.0065 23.9894 24.0065 24.1956 24.2128L29.7043 29.7215C29.9106 29.9278 29.9106 30.2622 29.7043 30.4684C29.6013 30.5716 29.466 30.6232 29.3309 30.6232Z" fill="#E9EDF1"/>
<path d="M11.2132 12.5055C11.0781 12.5055 10.9429 12.4539 10.8397 12.3508L5.33097 6.84203C5.1247 6.63576 5.1247 6.30133 5.33097 6.09513C5.53731 5.88886 5.87167 5.88886 6.07794 6.09513L11.5867 11.6039C11.7929 11.8101 11.7929 12.1446 11.5867 12.3508C11.4835 12.4539 11.3484 12.5055 11.2132 12.5055Z" fill="#E9EDF1"/>
<path d="M29.1335 15.7045H27.1526C27.0645 15.7045 26.9878 15.6461 26.9631 15.5616C26.7624 14.8743 26.4885 14.2186 26.1511 13.6024C26.1089 13.525 26.1216 13.4299 26.1835 13.3672L27.585 11.9658C27.6624 11.8891 27.6624 11.7644 27.585 11.6869L24.1462 8.24822C24.0688 8.17075 23.9441 8.17075 23.8673 8.24822L22.4659 9.64962C22.4033 9.71159 22.3082 9.72427 22.2307 9.68202C21.6145 9.34469 20.9589 9.07075 20.2716 8.87005C20.1871 8.8454 20.1286 8.76864 20.1286 8.68061V6.69962C20.1286 6.59047 20.0406 6.50244 19.9314 6.50244H15.0681C14.9589 6.50244 14.8709 6.59047 14.8709 6.69962V8.68061C14.8709 8.76864 14.8124 8.8454 14.7279 8.87005C14.0406 9.07075 13.385 9.34469 12.7688 9.68202C12.6913 9.72427 12.5962 9.71159 12.5335 9.64962L11.1321 8.24822C11.0554 8.17075 10.9307 8.17075 10.8533 8.24822L7.41454 11.6869C7.33707 11.7644 7.33707 11.8891 7.41454 11.9658L8.81595 13.3672C8.87792 13.4299 8.89059 13.525 8.84834 13.6024C8.5258 14.1919 8.26102 14.8165 8.06313 15.4714C8.05397 15.501 8.06454 15.5651 8.05538 15.5954C8.03073 15.6799 7.95397 15.7384 7.86595 15.7384L6.03214 15.8306C5.92299 15.8306 5.83496 15.9186 5.83496 16.0278L5.86524 20.5644C5.86524 20.6736 5.95327 20.7616 6.06243 20.7616L7.93848 20.7679C8.02651 20.7679 8.10327 20.8264 8.12792 20.9109C8.32862 21.5982 8.71242 22.4461 9.04975 23.0623C9.092 23.1398 9.07933 23.2348 9.01735 23.2975L7.62721 24.7038C7.54975 24.7806 7.54975 24.9052 7.62721 24.9827L10.8575 28.0503C10.935 28.1278 11.0596 28.1278 11.1364 28.0503L12.4399 26.8398C12.5026 26.7778 12.5976 26.7651 12.6751 26.8074C13.2913 27.1447 14.2645 27.4503 14.9519 27.651C15.0364 27.6757 15.0948 27.7524 15.0948 27.8405L15.0413 29.7524C15.0413 29.8616 15.1293 29.9496 15.2385 29.9496L19.7159 29.9081C19.8251 29.9081 19.9131 29.82 19.9131 29.7109L19.9645 27.8764C19.9645 27.7883 20.023 27.7116 20.1075 27.6869C20.5575 27.556 21.1371 27.4771 21.5575 27.2855C21.6258 27.2545 21.7814 27.2158 21.7814 27.2158C21.9335 27.1426 22.0835 27.0658 22.2307 26.9848C22.3082 26.9426 22.4033 26.9552 22.4659 27.0172L23.8673 28.4186C23.9441 28.4961 24.0688 28.4961 24.1462 28.4186L27.585 24.9799C27.6624 24.9024 27.6624 24.7778 27.585 24.701L26.1835 23.2996C26.1216 23.2369 26.1089 23.1419 26.1511 23.0644C26.4885 22.4482 26.7624 21.7926 26.9631 21.1052C26.9878 21.0207 27.0645 20.9623 27.1526 20.9623H29.1335C29.2427 20.9623 29.3307 20.8743 29.3307 20.7651V15.9017C29.3307 15.7926 29.2427 15.7045 29.1335 15.7045ZM17.5399 21.2693C15.8962 21.2693 14.5638 19.9369 14.5638 18.2933C14.5638 16.6496 15.8962 15.3172 17.5399 15.3172C19.1835 15.3172 20.5159 16.6496 20.5159 18.2933C20.5159 19.9369 19.1835 21.2693 17.5399 21.2693Z" fill="#C3C1C9"/>
<path d="M21.7816 27.2158C21.2992 27.4489 20.7943 27.6439 20.2718 27.7967C20.1872 27.8214 20.1288 27.8982 20.1288 27.9862V29.9672C20.1288 30.0763 20.0408 30.1644 19.9316 30.1644H15.0682C14.9591 30.1644 14.8711 30.0763 14.8711 29.9672V27.9862C14.8711 27.8982 14.8126 27.8214 14.7281 27.7967C14.0408 27.596 13.3851 27.3221 12.7689 26.9848C12.6915 26.9425 12.5964 26.9552 12.5337 27.0172L11.1323 28.4186C11.0556 28.496 10.9309 28.496 10.8534 28.4186L7.41472 24.9798C7.33725 24.9024 7.33725 24.7777 7.41472 24.701L8.81613 23.2996C8.8781 23.2369 8.89078 23.1418 8.84852 23.0644C8.5112 22.4482 8.23725 21.7925 8.03655 21.1052C8.0119 21.0207 7.93514 20.9622 7.84711 20.9622H5.86613C5.75697 20.9622 5.66895 20.8742 5.66895 20.7651V15.9017C5.66895 15.7925 5.75697 15.7045 5.86613 15.7045H7.84711C7.93514 15.7045 8.0119 15.6461 8.03655 15.5615C8.045 15.5313 8.05352 15.5008 8.06338 15.4712C8.12747 22.0367 13.4704 27.3397 20.0513 27.3397C20.6387 27.3397 21.2168 27.2975 21.7816 27.2158Z" fill="#ADACB5"/>
<path d="M17.5401 12.272C14.2148 12.272 11.5183 14.9677 11.5183 18.2938C11.5183 21.6192 14.2148 24.3156 17.5401 24.3156C20.8662 24.3156 23.562 21.6192 23.562 18.2938C23.562 14.9677 20.8662 12.272 17.5401 12.272ZM17.5401 20.653C16.2373 20.653 15.181 19.5966 15.181 18.2938C15.181 16.991 16.2373 15.9346 17.5401 15.9346C18.843 15.9346 19.8993 16.991 19.8993 18.2938C19.8993 19.5966 18.843 20.653 17.5401 20.653Z" fill="#ADACB5"/>
<path d="M34.9999 4.53117C34.9999 2.48926 33.3446 0.833984 31.3027 0.833984C30.589 0.833984 29.9225 1.03624 29.3574 1.38652C29.3574 1.38652 29.164 1.54589 29.0626 1.62441C28.1892 2.30067 27.7471 3.3411 27.7471 4.53124C27.7471 6.57314 29.2607 8.01637 31.3026 8.01637C32.404 8.01637 33.3538 7.71511 34.0312 6.95102C34.114 6.85757 34.3045 6.68997 34.3045 6.68997C34.7421 6.0825 34.9999 5.33694 34.9999 4.53117Z" fill="#73C2FB"/>
<path d="M34.3045 6.69058C33.6334 7.62227 32.5386 8.22903 31.3026 8.22903C29.2611 8.22903 27.6055 6.5734 27.6055 4.53185C27.6055 3.20368 28.306 2.03862 29.3574 1.38721C28.9193 1.99425 28.6618 2.7403 28.6618 3.54594C28.6618 5.58749 30.3174 7.24312 32.359 7.24312C33.0731 7.24312 33.7397 7.04129 34.3045 6.69058Z" fill="#4B9CD3"/>
<path d="M31.3028 6.11652C32.1779 6.11652 32.8873 5.40711 32.8873 4.53202C32.8873 3.65692 32.1779 2.94751 31.3028 2.94751C30.4277 2.94751 29.7183 3.65692 29.7183 4.53202C29.7183 5.40711 30.4277 6.11652 31.3028 6.11652Z" fill="#4B9CD3"/>
<path d="M7.39434 4.53117C7.39434 2.48926 5.73906 0.833984 3.69716 0.833984C2.98343 0.833984 2.31695 1.03624 1.75188 1.38652C1.75188 1.38652 1.55843 1.54589 1.45709 1.62441C0.583714 2.3006 0.141602 3.3411 0.141602 4.53117C0.141602 6.57307 1.65526 8.0163 3.69716 8.0163C4.79857 8.0163 5.74836 7.71504 6.42568 6.95095C6.50857 6.8575 6.69899 6.6899 6.69899 6.6899C7.1366 6.0825 7.39434 5.33694 7.39434 4.53117Z" fill="#7CB9E8"/>
<path d="M6.69901 6.69058C6.02788 7.62227 4.9331 8.22903 3.69718 8.22903C1.65563 8.22903 0 6.5734 0 4.53185C0 3.20368 0.700493 2.03862 1.7519 1.38721C1.31387 1.99425 1.05634 2.7403 1.05634 3.54594C1.05634 5.58749 2.71197 7.24312 4.75352 7.24312C5.4676 7.24312 6.13422 7.04129 6.69901 6.69058Z" fill="#6699CC"/>
<path d="M3.69705 6.11652C4.57215 6.11652 5.28156 5.40711 5.28156 4.53202C5.28156 3.65692 4.57215 2.94751 3.69705 2.94751C2.82196 2.94751 2.11255 3.65692 2.11255 4.53202C2.11255 5.40711 2.82196 6.11652 3.69705 6.11652Z" fill="#6699CC"/>
<path d="M35.0001 32.1376C35.0001 30.0957 33.3448 28.4404 31.3029 28.4404C30.5892 28.4404 29.9227 28.6427 29.3577 28.993C29.3577 28.993 29.1642 29.1523 29.0629 29.2309C28.1894 29.9071 27.7473 30.9475 27.7473 32.1377C27.7473 34.1796 29.261 35.6228 31.3029 35.6228C32.4043 35.6228 33.3541 35.3216 34.0314 34.5575C34.1143 34.464 34.3047 34.2964 34.3047 34.2964C34.7424 33.6889 35.0001 32.9434 35.0001 32.1376Z" fill="#6086FF"/>
<path d="M34.305 34.2956C33.6338 35.2273 32.5391 35.834 31.3031 35.834C29.2616 35.834 27.606 34.1784 27.606 32.1368C27.606 30.8087 28.3065 29.6436 29.3579 28.9922C28.9198 29.5992 28.6623 30.3453 28.6623 31.1509C28.6623 33.1925 30.3179 34.8481 32.3595 34.8481C33.0736 34.8481 33.7402 34.6463 34.305 34.2956Z" fill="#023DFE"/>
<path d="M31.3033 33.7217C32.1784 33.7217 32.8878 33.0123 32.8878 32.1372C32.8878 31.2621 32.1784 30.5527 31.3033 30.5527C30.4282 30.5527 29.7188 31.2621 29.7188 32.1372C29.7188 33.0123 30.4282 33.7217 31.3033 33.7217Z" fill="#023DFE"/>
<path d="M7.39434 32.1376C7.39434 30.0957 5.73906 28.4404 3.69716 28.4404C2.98343 28.4404 2.31695 28.6427 1.75188 28.993C1.75188 28.993 1.55843 29.1523 1.45709 29.2309C0.583714 29.907 0.141602 30.9475 0.141602 32.1376C0.141602 34.1795 1.65526 35.6228 3.69716 35.6228C4.79857 35.6228 5.74836 35.3215 6.42568 34.5574C6.50857 34.4639 6.69899 34.2963 6.69899 34.2963C7.1366 33.6889 7.39434 32.9434 7.39434 32.1376Z" fill="#76ABDF"/>
<path d="M6.69901 34.2956C6.02788 35.2273 4.9331 35.834 3.69718 35.834C1.65563 35.834 0 34.1784 0 32.1368C0 30.8087 0.700493 29.6436 1.7519 28.9922C1.31387 29.5992 1.05634 30.3453 1.05634 31.1509C1.05634 33.1925 2.71197 34.8481 4.75352 34.8481C5.4676 34.8481 6.13422 34.6463 6.69901 34.2956Z" fill="#4682B4"/>
<path d="M3.69705 33.7217C4.57215 33.7217 5.28156 33.0123 5.28156 32.1372C5.28156 31.2621 4.57215 30.5527 3.69705 30.5527C2.82196 30.5527 2.11255 31.2621 2.11255 32.1372C2.11255 33.0123 2.82196 33.7217 3.69705 33.7217Z" fill="#4682B4"/>
<path d="M11.5185 18.8222C11.6454 18.8222 11.7693 18.7765 11.8664 18.6915L13.8114 16.9891C14.0309 16.797 14.0532 16.4634 13.861 16.2439C13.669 16.0243 13.3352 16.0022 13.1157 16.1943L12.2055 16.9909C12.7957 14.5928 14.9731 12.8005 17.54 12.8005C19.8371 12.8005 21.9109 14.2491 22.7002 16.4051C22.8006 16.6791 23.1037 16.8198 23.3778 16.7195C23.6517 16.6192 23.7925 16.3158 23.6922 16.0419C22.751 13.4713 20.2786 11.7441 17.54 11.7441C15.8053 11.7441 14.1704 12.4155 12.9366 13.6347C12.1095 14.452 11.5277 15.4527 11.2267 16.5455L10.8242 15.7489C10.6926 15.4885 10.3748 15.384 10.1146 15.5156C9.85425 15.6472 9.74974 15.9648 9.88136 16.2252L11.0471 18.5322C11.1207 18.6779 11.2575 18.7814 11.4178 18.8125C11.4513 18.819 11.485 18.8222 11.5185 18.8222Z" fill="#F7F9FA"/>
<path d="M25.1992 20.368L24.0335 18.061C23.9598 17.9153 23.823 17.8118 23.6627 17.7807C23.5027 17.7496 23.337 17.7942 23.2142 17.9018L21.2691 19.6042C21.0496 19.7963 21.0273 20.1299 21.2195 20.3494C21.4116 20.5689 21.7452 20.5911 21.9648 20.399L22.8727 19.6044C22.2802 21.999 20.1049 23.7877 17.5399 23.7877C15.2331 23.7877 13.1564 22.3309 12.3722 20.1627C12.273 19.8883 11.9701 19.7463 11.6959 19.8456C11.4215 19.9449 11.2796 20.2476 11.3788 20.522C12.3137 23.1071 14.7897 24.844 17.5399 24.844C19.2753 24.844 20.9105 24.1721 22.1446 22.9522C22.9704 22.1357 23.5515 21.1364 23.8524 20.0451L24.2563 20.8444C24.3492 21.0284 24.5351 21.1345 24.7281 21.1345C24.8082 21.1345 24.8895 21.1162 24.9659 21.0776C25.2263 20.9461 25.3308 20.6284 25.1992 20.368Z" fill="#F7F9FA"/>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -370,6 +370,9 @@ class HomeCubit extends Cubit<HomeState> {
.add(const SmartSceneClearEvent());
BlocProvider.of<EffectPeriodBloc>(NavigationService.navigatorKey.currentState!.context)
.add(ResetEffectivePeriod());
NavigationService.navigatorKey.currentContext!
.read<CreateSceneBloc>()
.add(const ClearTabToRunSetting());
},
),
IconButton(

View File

@ -40,13 +40,10 @@ class SceneListview extends StatelessWidget {
sceneName: scene.name,
),
);
context
.read<SmartSceneSelectBloc>()
.add(const SmartSceneClearEvent());
context.read<SmartSceneSelectBloc>().add(const SmartSceneClearEvent());
BlocProvider.of<CreateSceneBloc>(context).add(
FetchSceneTasksEvent(
sceneId: scene.id, isAutomation: false));
BlocProvider.of<CreateSceneBloc>(context)
.add(FetchSceneTasksEvent(sceneId: scene.id, isAutomation: false));
/// the state to set the scene type must be after the fetch
BlocProvider.of<CreateSceneBloc>(context)
@ -59,11 +56,13 @@ class SceneListview extends StatelessWidget {
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Image.asset(
child: Image.memory(
height: 32,
width: 32,
Assets.assetsIconsLogo,
scene.iconInBytes,
fit: BoxFit.fill,
errorBuilder: (context, error, stackTrace) => Image.asset(
height: 32, width: 32, fit: BoxFit.fill, Assets.assetsIconsLogo),
),
),
Expanded(

View File

@ -1,5 +1,4 @@
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/devices/model/device_control_model.dart';
@ -38,6 +37,9 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
on<SceneTypeEvent>(_sceneTypeEvent);
on<EffectiveTimePeriodEvent>(_onEffectiveTimeEvent);
on<SceneIconEvent>(_fetchIconScene);
on<IconSelected>(_iconSelected);
on<ShowOnDeviceClicked>(_showInDeviceClicked);
on<ClearTabToRunSetting>(_clearTabToRunSetting);
}
CreateSceneEnum sceneType = CreateSceneEnum.none;
@ -54,9 +56,11 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
final Map<String, String> automationComparatorValues = {};
String conditionRule = 'or';
EffectiveTime? effectiveTime;
List<IconModel> iconModelList = [];
String selectedIcon = '';
bool showInDeviceScreen = false;
FutureOr<void> _onAddSceneTask(
AddTaskEvent event, Emitter<CreateSceneState> emit) {
FutureOr<void> _onAddSceneTask(AddTaskEvent event, Emitter<CreateSceneState> emit) {
emit(CreateSceneLoading());
if (event.isAutomation == true) {
final copyList = List<SceneStaticFunction>.from(automationTempTasksList);
@ -91,8 +95,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
}
}
void addToTempTaskList(
TempHoldSceneTasksEvent event, Emitter<CreateSceneState> emit) {
void addToTempTaskList(TempHoldSceneTasksEvent event, Emitter<CreateSceneState> emit) {
emit(CreateSceneLoading());
bool updated = false;
@ -177,8 +180,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
));
}
void addToTempAutomationTaskList(
TempHoldSceneTasksEvent event, Emitter<CreateSceneState> emit) {
void addToTempAutomationTaskList(TempHoldSceneTasksEvent event, Emitter<CreateSceneState> emit) {
emit(CreateSceneLoading());
bool updated = false;
for (var element in automationTempTasksList) {
@ -200,10 +202,8 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
],
comparator: automationComparatorValues[element.code],
);
automationTempTasksList[automationTempTasksList.indexOf(element)] =
updatedElement;
automationSelectedValues[updatedElement.code] =
event.deviceControlModel.value;
automationTempTasksList[automationTempTasksList.indexOf(element)] = updatedElement;
automationSelectedValues[updatedElement.code] = event.deviceControlModel.value;
updated = true;
break;
}
@ -223,12 +223,10 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
icon: '',
),
],
comparator:
automationComparatorValues[event.deviceControlModel.code] ?? '==',
comparator: automationComparatorValues[event.deviceControlModel.code] ?? '==',
);
automationTempTasksList.add(newElement);
automationSelectedValues[newElement.code] =
event.deviceControlModel.value;
automationSelectedValues[newElement.code] = event.deviceControlModel.value;
}
emit(AddSceneTask(
tasksList: tasksList,
@ -237,8 +235,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
));
}
FutureOr<void> _selectedValue(
SelectedValueEvent event, Emitter<CreateSceneState> emit) {
FutureOr<void> _selectedValue(SelectedValueEvent event, Emitter<CreateSceneState> emit) {
if (event.isAutomation == true) {
automationSelectedValues[event.code] = event.value;
automationComparatorValues[event.code] = event.comparator ?? '==';
@ -275,8 +272,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
));
}
FutureOr<void> _removeTaskById(
RemoveTaskByIdEvent event, Emitter<CreateSceneState> emit) {
FutureOr<void> _removeTaskById(RemoveTaskByIdEvent event, Emitter<CreateSceneState> emit) {
emit(CreateSceneLoading());
if (event.isAutomation == true) {
for (var element in automationTasksList) {
@ -349,8 +345,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
: await SceneApi.createScene(event.createSceneModel!);
} else if (event.createAutomationModel != null) {
response = event.updateScene
? await SceneApi.updateAutomation(
event.createAutomationModel!, event.sceneId)
? await SceneApi.updateAutomation(event.createAutomationModel!, event.sceneId)
: await SceneApi.createAutomation(event.createAutomationModel!);
}
@ -362,14 +357,14 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
automationTempTasksList.clear();
automationSelectedValues.clear();
automationComparatorValues.clear();
effectiveTime =
EffectiveTime(start: '00:00', end: '23:59', loops: '1111111');
selectedIcon = '';
showInDeviceScreen = false;
effectiveTime = EffectiveTime(start: '00:00', end: '23:59', loops: '1111111');
sceneType = CreateSceneEnum.none;
conditionRule = 'or';
emit(const CreateSceneWithTasks(success: true));
CustomSnackBar.greenSnackBar(event.updateScene
? 'Scene updated successfully'
: 'Scene created successfully');
CustomSnackBar.greenSnackBar(
event.updateScene ? 'Scene updated successfully' : 'Scene created successfully');
} else {
emit(const CreateSceneError(message: 'Something went wrong'));
}
@ -383,8 +378,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
}
}
FutureOr<void> _clearTaskList(
ClearTaskListEvent event, Emitter<CreateSceneState> emit) {
FutureOr<void> _clearTaskList(ClearTaskListEvent event, Emitter<CreateSceneState> emit) {
emit(CreateSceneLoading());
automationTasksList.clear();
tasksList.clear();
@ -395,6 +389,19 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
));
}
FutureOr<void> _clearTabToRunSetting(ClearTabToRunSetting event, Emitter<CreateSceneState> emit) {
emit(CreateSceneLoading());
selectedIcon = '';
showInDeviceScreen = false;
emit(AddSceneTask(
tasksList: tasksList,
automationTasksList: automationTasksList,
condition: conditionRule,
showInDevice: showInDeviceScreen,
selectedIcon: selectedIcon,
iconModels: iconModelList));
}
FutureOr<void> _fetchSceneTasks(
FetchSceneTasksEvent event, Emitter<CreateSceneState> emit) async {
emit(CreateSceneLoading());
@ -407,8 +414,9 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
automationTempTasksList.clear();
automationSelectedValues.clear();
automationComparatorValues.clear();
effectiveTime =
EffectiveTime(start: '00:00', end: '23:59', loops: '1111111');
selectedIcon = '';
showInDeviceScreen = false;
effectiveTime = EffectiveTime(start: '00:00', end: '23:59', loops: '1111111');
sceneType = CreateSceneEnum.none;
conditionRule = 'or';
@ -417,14 +425,10 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
: await SceneApi.getSceneDetails(event.sceneId);
if (response.id.isNotEmpty) {
if (event.isAutomation) {
automationTasksList = List<SceneStaticFunction>.from(
getTaskListFunctionsFromApi(
actions: [],
isAutomation: true,
conditions: response.conditions));
automationTasksList = List<SceneStaticFunction>.from(getTaskListFunctionsFromApi(
actions: [], isAutomation: true, conditions: response.conditions));
tasksList = List<SceneStaticFunction>.from(
getTaskListFunctionsFromApi(
actions: response.actions, isAutomation: false));
getTaskListFunctionsFromApi(actions: response.actions, isAutomation: false));
conditionRule = response.decisionExpr ?? conditionRule;
@ -437,28 +441,31 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
: EffectiveTime(start: '00:00', end: '23:59', loops: '1111111');
// Set the days directly from the API response
BlocProvider.of<EffectPeriodBloc>(
NavigationService.navigatorKey.currentContext!)
BlocProvider.of<EffectPeriodBloc>(NavigationService.navigatorKey.currentContext!)
.add(SetDays(response.effectiveTime?.loops ?? '1111111'));
// Set Custom Time and reset days first
BlocProvider.of<EffectPeriodBloc>(
NavigationService.navigatorKey.currentContext!)
BlocProvider.of<EffectPeriodBloc>(NavigationService.navigatorKey.currentContext!)
.add(SetCustomTime(effectiveTime!.start, effectiveTime!.end));
emit(AddSceneTask(
automationTasksList: automationTasksList,
tasksList: tasksList,
condition: conditionRule,
));
automationTasksList: automationTasksList,
tasksList: tasksList,
condition: conditionRule,
iconModels: iconModelList,
selectedIcon: selectedIcon,
showInDevice: showInDeviceScreen));
} else {
tasksList = List<SceneStaticFunction>.from(
getTaskListFunctionsFromApi(
actions: response.actions, isAutomation: false));
getTaskListFunctionsFromApi(actions: response.actions, isAutomation: false));
selectedIcon = response.icon!;
showInDeviceScreen = response.showInDevice!;
emit(AddSceneTask(
tasksList: tasksList,
condition: conditionRule,
));
tasksList: tasksList,
condition: conditionRule,
iconModels: iconModelList,
selectedIcon: selectedIcon,
showInDevice: showInDeviceScreen));
}
} else {
emit(const CreateSceneError(message: 'Something went wrong'));
@ -468,19 +475,52 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
}
}
List<IconModel> iconModel = [];
FutureOr<void> _fetchIconScene(
SceneIconEvent event, Emitter<CreateSceneState> emit) async {
FutureOr<void> _fetchIconScene(SceneIconEvent event, Emitter<CreateSceneState> emit) async {
emit(CreateSceneLoading());
try {
final response = await SceneApi.getIcon();
iconModel = (response as List<dynamic>)
.map((iconJson) =>
IconModel.fromJson(iconJson as Map<String, dynamic>))
.toList();
print(iconModel[0].iconBase64.toString());
emit(CreateSceneLoaded(iconModel));
iconModelList = await SceneApi.getIcon();
emit(AddSceneTask(
tasksList: tasksList,
automationTasksList: automationTasksList,
condition: conditionRule,
showInDevice: showInDeviceScreen,
selectedIcon: selectedIcon,
iconModels: iconModelList));
} catch (e) {
emit(const CreateSceneError(message: 'Something went wrong'));
}
}
FutureOr<void> _iconSelected(IconSelected event, Emitter<CreateSceneState> emit) async {
try {
if (event.confirmSelection) {
selectedIcon = event.iconId;
}
emit(CreateSceneLoading());
emit(AddSceneTask(
tasksList: tasksList,
automationTasksList: automationTasksList,
showInDevice: showInDeviceScreen,
condition: conditionRule,
selectedIcon: event.iconId,
iconModels: iconModelList));
} catch (e) {
emit(const CreateSceneError(message: 'Something went wrong'));
}
}
FutureOr<void> _showInDeviceClicked(
ShowOnDeviceClicked event, Emitter<CreateSceneState> emit) async {
try {
emit(CreateSceneLoading());
showInDeviceScreen = event.value;
emit(AddSceneTask(
tasksList: tasksList,
automationTasksList: automationTasksList,
condition: conditionRule,
selectedIcon: selectedIcon,
iconModels: iconModelList,
showInDevice: showInDeviceScreen));
} catch (e) {
emit(const CreateSceneError(message: 'Something went wrong'));
}
@ -491,8 +531,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
return days[index];
}
FutureOr<void> _clearTempTaskList(
ClearTempTaskListEvent event, Emitter<CreateSceneState> emit) {
FutureOr<void> _clearTempTaskList(ClearTempTaskListEvent event, Emitter<CreateSceneState> emit) {
emit(CreateSceneLoading());
if (event.isAutomation == true) {
automationTempTasksList.clear();
@ -536,17 +575,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 =
sceneType.name == CreateSceneEnum.deviceStatusChanges.name
? await SceneApi.deleteAutomation(
automationId: event.sceneId, unitUuid: event.unitUuid)
: await SceneApi.deleteScene(
sceneId: event.sceneId, unitUuid: event.unitUuid);
final response = sceneType.name == CreateSceneEnum.deviceStatusChanges.name
? await SceneApi.deleteAutomation(automationId: event.sceneId, unitUuid: event.unitUuid)
: await SceneApi.deleteScene(sceneId: event.sceneId, unitUuid: event.unitUuid);
if (response == true) {
emit(const DeleteSceneSuccess(true));
} else {
@ -557,8 +592,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
}
}
FutureOr<void> _updateTaskValue(
UpdateTaskEvent event, Emitter<CreateSceneState> emit) {
FutureOr<void> _updateTaskValue(UpdateTaskEvent event, Emitter<CreateSceneState> emit) {
emit(CreateSceneLoading());
if (event.isAutomation == true) {
for (var i = 0; i < automationTasksList.length; i++) {
@ -594,8 +628,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
));
}
FutureOr<void> _selectConditionRule(
SelectConditionEvent event, Emitter<CreateSceneState> emit) {
FutureOr<void> _selectConditionRule(SelectConditionEvent event, Emitter<CreateSceneState> emit) {
emit(CreateSceneInitial());
if (event.condition.contains('any')) {
conditionRule = 'or';
@ -610,8 +643,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
));
}
FutureOr<void> _sceneTypeEvent(
SceneTypeEvent event, Emitter<CreateSceneState> emit) {
FutureOr<void> _sceneTypeEvent(SceneTypeEvent event, Emitter<CreateSceneState> emit) {
// emit(CreateSceneInitial());
if (event.type == CreateSceneEnum.tabToRun) {

View File

@ -149,8 +149,7 @@ class FetchSceneTasksEvent extends CreateSceneEvent {
final String sceneId;
final bool isAutomation;
const FetchSceneTasksEvent(
{this.isAutomation = false, required this.sceneId});
const FetchSceneTasksEvent({this.isAutomation = false, required this.sceneId});
@override
List<Object> get props => [sceneId, isAutomation];
@ -185,3 +184,31 @@ class EffectiveTimePeriodEvent extends CreateSceneEvent {
}
class SceneIconEvent extends CreateSceneEvent {}
class IconSelected extends CreateSceneEvent {
final String iconId;
final bool confirmSelection;
const IconSelected({required this.iconId, required this.confirmSelection});
@override
List<Object> get props => [iconId];
}
class ShowOnDeviceClicked extends CreateSceneEvent {
final bool value;
const ShowOnDeviceClicked({
required this.value,
});
@override
List<Object> get props => [value];
}
class ClearTabToRunSetting extends CreateSceneEvent {
const ClearTabToRunSetting();
@override
List<Object> get props => [];
}

View File

@ -23,8 +23,16 @@ class AddSceneTask extends CreateSceneState {
final List<SceneStaticFunction> tasksList;
final List<SceneStaticFunction>? automationTasksList;
final String? condition;
final String? selectedIcon;
final List<IconModel>? iconModels;
final bool? showInDevice;
const AddSceneTask(
{required this.tasksList, this.automationTasksList, this.condition});
{required this.tasksList,
this.automationTasksList,
this.condition,
this.iconModels,
this.selectedIcon,
this.showInDevice});
@override
List<Object> get props => [tasksList];
@ -33,8 +41,7 @@ class AddSceneTask extends CreateSceneState {
class TempHoldSceneTask extends CreateSceneState {
final List<SceneStaticFunction> tempTasksList;
final List<SceneStaticFunction>? automationTempTasksList;
const TempHoldSceneTask(
{required this.tempTasksList, this.automationTempTasksList});
const TempHoldSceneTask({required this.tempTasksList, this.automationTempTasksList});
@override
List<Object> get props => [tempTasksList];
@ -84,8 +91,3 @@ class SceneTypeState extends CreateSceneState {
final CreateSceneEnum type;
const SceneTypeState(this.type);
}
class CreateSceneLoaded extends CreateSceneState {
final List<IconModel> iconModels;
CreateSceneLoaded(this.iconModels);
}

View File

@ -24,7 +24,7 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
try {
if (event.unitId.isNotEmpty) {
scenes = await SceneApi.getScenesByUnitId(event.unitId);
scenes = await SceneApi.getScenesByUnitId(event.unitId, showInDevice: event.showInDevice);
emit(SceneLoaded(scenes, automationList));
} else {
emit(const SceneError(message: 'Unit ID is empty'));
@ -34,8 +34,7 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
}
}
Future<void> _onLoadAutomation(
LoadAutomation event, Emitter<SceneState> emit) async {
Future<void> _onLoadAutomation(LoadAutomation event, Emitter<SceneState> emit) async {
emit(SceneLoading());
try {
@ -50,8 +49,7 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
}
}
Future<void> _onSceneTrigger(
SceneTrigger event, Emitter<SceneState> emit) async {
Future<void> _onSceneTrigger(SceneTrigger event, Emitter<SceneState> emit) async {
final currentState = state;
if (currentState is SceneLoaded) {
emit(SceneLoaded(
@ -78,9 +76,8 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
UpdateAutomationStatus event, Emitter<SceneState> emit) async {
final currentState = state;
if (currentState is SceneLoaded) {
final newLoadingStates =
Map<String, bool>.from(currentState.loadingStates)
..[event.automationId] = true;
final newLoadingStates = Map<String, bool>.from(currentState.loadingStates)
..[event.automationId] = true;
emit(SceneLoaded(
currentState.scenes,
@ -89,11 +86,11 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
));
try {
final success = await SceneApi.updateAutomationStatus(
event.automationId, event.automationStatusUpdate);
final success =
await SceneApi.updateAutomationStatus(event.automationId, event.automationStatusUpdate);
if (success) {
automationList = await SceneApi.getAutomationByUnitId(
event.automationStatusUpdate.unitUuid);
automationList =
await SceneApi.getAutomationByUnitId(event.automationStatusUpdate.unitUuid);
newLoadingStates[event.automationId] = false;
emit(SceneLoaded(
currentState.scenes,

View File

@ -10,11 +10,12 @@ abstract class SceneEvent extends Equatable {
class LoadScenes extends SceneEvent {
final String unitId;
final bool showInDevice;
const LoadScenes(this.unitId);
const LoadScenes(this.unitId, {this.showInDevice = false});
@override
List<Object> get props => [unitId];
List<Object> get props => [unitId, showInDevice];
}
class LoadAutomation extends SceneEvent {
@ -41,8 +42,7 @@ class UpdateAutomationStatus extends SceneEvent {
final String automationId;
final AutomationStatusUpdate automationStatusUpdate;
const UpdateAutomationStatus(
{required this.automationStatusUpdate, required this.automationId});
const UpdateAutomationStatus({required this.automationStatusUpdate, required this.automationId});
@override
List<Object> get props => [automationStatusUpdate];

View File

@ -125,6 +125,8 @@ mixin SceneLogicHelper {
} else {
final createSceneModel = CreateSceneModel(
unitUuid: HomeCubit.getInstance().selectedSpace!.id ?? '',
iconId: sceneBloc.selectedIcon,
showInDevice: sceneBloc.showInDeviceScreen,
sceneName: sceneName.text,
decisionExpr: 'and',
actions: [
@ -171,24 +173,21 @@ mixin SceneLogicHelper {
}
}
Widget getTheCorrectDialogBody(
SceneStaticFunction taskItem, dynamic functionValue,
Widget getTheCorrectDialogBody(SceneStaticFunction taskItem, dynamic functionValue,
{required bool isAutomation}) {
if (taskItem.operationDialogType == OperationDialogType.temperature) {
return AlertDialogTemperatureBody(
taskItem: taskItem,
functionValue: functionValue ?? taskItem.functionValue,
);
} else if ((taskItem.operationDialogType ==
OperationDialogType.countdown) ||
} else if ((taskItem.operationDialogType == OperationDialogType.countdown) ||
(taskItem.operationDialogType == OperationDialogType.delay)) {
return AlertDialogCountdown(
durationValue: taskItem.functionValue ?? 0,
functionValue: functionValue ?? taskItem.functionValue,
function: taskItem,
);
} else if (taskItem.operationDialogType ==
OperationDialogType.integerSteps) {
} else if (taskItem.operationDialogType == OperationDialogType.integerSteps) {
return AlertDialogSliderSteps(
taskItem: taskItem,
functionValue: functionValue ?? taskItem.functionValue,

View File

@ -4,12 +4,16 @@ import 'package:flutter/foundation.dart';
class CreateSceneModel {
String unitUuid;
String iconId;
bool showInDevice;
String sceneName;
String decisionExpr;
List<CreateSceneAction> actions;
CreateSceneModel({
required this.unitUuid,
required this.iconId,
required this.showInDevice,
required this.sceneName,
required this.decisionExpr,
required this.actions,
@ -17,12 +21,16 @@ class CreateSceneModel {
CreateSceneModel copyWith({
String? unitUuid,
String? iconId,
bool? showInDevice,
String? sceneName,
String? decisionExpr,
List<CreateSceneAction>? actions,
}) {
return CreateSceneModel(
unitUuid: unitUuid ?? this.unitUuid,
iconId: iconId ?? this.iconId,
showInDevice: showInDevice ?? this.showInDevice,
sceneName: sceneName ?? this.sceneName,
decisionExpr: decisionExpr ?? this.decisionExpr,
actions: actions ?? this.actions,
@ -32,6 +40,8 @@ class CreateSceneModel {
Map<String, dynamic> toMap([String? sceneId]) {
return {
if (sceneId == null) 'unitUuid': unitUuid,
if (iconId.isNotEmpty) 'iconUuid': iconId,
'showInHomePage': showInDevice,
'sceneName': sceneName,
'decisionExpr': decisionExpr,
'actions': actions.map((x) => x.toMap()).toList(),
@ -41,17 +51,18 @@ class CreateSceneModel {
factory CreateSceneModel.fromMap(Map<String, dynamic> map) {
return CreateSceneModel(
unitUuid: map['unitUuid'] ?? '',
iconId: map['iconUuid'] ?? '',
showInDevice: map['showInHomePage'] ?? false,
sceneName: map['sceneName'] ?? '',
decisionExpr: map['decisionExpr'] ?? '',
actions: List<CreateSceneAction>.from(
map['actions']?.map((x) => CreateSceneAction.fromMap(x))),
actions:
List<CreateSceneAction>.from(map['actions']?.map((x) => CreateSceneAction.fromMap(x))),
);
}
String toJson([String? sceneId]) => json.encode(toMap(sceneId));
factory CreateSceneModel.fromJson(String source) =>
CreateSceneModel.fromMap(json.decode(source));
factory CreateSceneModel.fromJson(String source) => CreateSceneModel.fromMap(json.decode(source));
@override
String toString() {
@ -64,6 +75,8 @@ class CreateSceneModel {
return other is CreateSceneModel &&
other.unitUuid == unitUuid &&
other.iconId == iconId &&
other.showInDevice == showInDevice &&
other.sceneName == sceneName &&
other.decisionExpr == decisionExpr &&
listEquals(other.actions, actions);
@ -71,10 +84,7 @@ class CreateSceneModel {
@override
int get hashCode {
return unitUuid.hashCode ^
sceneName.hashCode ^
decisionExpr.hashCode ^
actions.hashCode;
return unitUuid.hashCode ^ sceneName.hashCode ^ decisionExpr.hashCode ^ actions.hashCode;
}
}
@ -120,8 +130,7 @@ class CreateSceneAction {
return CreateSceneAction(
entityId: map['entityId'] ?? '',
actionExecutor: map['actionExecutor'] ?? '',
executorProperty:
CreateSceneExecutorProperty.fromMap(map['executorProperty']),
executorProperty: CreateSceneExecutorProperty.fromMap(map['executorProperty']),
);
}
@ -145,8 +154,7 @@ class CreateSceneAction {
}
@override
int get hashCode =>
entityId.hashCode ^ actionExecutor.hashCode ^ executorProperty.hashCode;
int get hashCode => entityId.hashCode ^ actionExecutor.hashCode ^ executorProperty.hashCode;
}
class CreateSceneExecutorProperty {
@ -210,6 +218,5 @@ class CreateSceneExecutorProperty {
}
@override
int get hashCode =>
functionCode.hashCode ^ functionValue.hashCode ^ delaySeconds.hashCode;
int get hashCode => functionCode.hashCode ^ functionValue.hashCode ^ delaySeconds.hashCode;
}

View File

@ -4,6 +4,8 @@ class SceneDetailsModel {
final String id;
final String name;
final String status;
final String? icon;
final bool? showInDevice;
final String type;
final List<Action> actions;
final List<Condition>? conditions;
@ -16,48 +18,44 @@ class SceneDetailsModel {
required this.status,
required this.type,
required this.actions,
this.icon,
this.showInDevice,
this.conditions,
this.decisionExpr,
this.effectiveTime,
});
factory SceneDetailsModel.fromRawJson(String str) =>
SceneDetailsModel.fromJson(json.decode(str));
factory SceneDetailsModel.fromRawJson(String str) => SceneDetailsModel.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory SceneDetailsModel.fromJson(Map<String, dynamic> json) =>
SceneDetailsModel(
id: json["id"],
name: json["name"],
status: json["status"],
type: json["type"],
actions: (json["actions"] as List)
.map((x) => Action.fromJson(x))
.where((x) => x != null)
.toList()
.cast<Action>(),
conditions: json["conditions"] != null
? (json["conditions"] as List)
.map((x) => Condition.fromJson(x))
.toList()
: null,
decisionExpr: json["decisionExpr"],
effectiveTime: json["effectiveTime"] != null
? EffectiveTime.fromJson(json["effectiveTime"])
: null,
);
factory SceneDetailsModel.fromJson(Map<String, dynamic> json) => SceneDetailsModel(
id: json["id"],
name: json["name"],
status: json["status"],
type: json["type"],
actions: (json["actions"] as List)
.map((x) => Action.fromJson(x))
.where((x) => x != null)
.toList()
.cast<Action>(),
conditions: json["conditions"] != null
? (json["conditions"] as List).map((x) => Condition.fromJson(x)).toList()
: null,
decisionExpr: json["decisionExpr"],
effectiveTime:
json["effectiveTime"] != null ? EffectiveTime.fromJson(json["effectiveTime"]) : null,
icon: json["iconUuid"] != null ? json["iconUuid"] ?? '' : '',
showInDevice: json['showInHome'] != null ? json['showInHome'] ?? false : false);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"status": status,
"type": type,
"actions": List<dynamic>.from(actions.map((x) => x.toJson())),
"conditions": conditions != null
? List<dynamic>.from(conditions!.map((x) => x.toJson()))
: null,
"conditions":
conditions != null ? List<dynamic>.from(conditions!.map((x) => x.toJson())) : null,
"decisionExpr": decisionExpr,
"effectiveTime": effectiveTime?.toJson(),
};
@ -118,8 +116,7 @@ class ExecutorProperty {
this.delaySeconds,
});
factory ExecutorProperty.fromJson(Map<String, dynamic> json) =>
ExecutorProperty(
factory ExecutorProperty.fromJson(Map<String, dynamic> json) => ExecutorProperty(
functionCode: json["functionCode"] ?? '',
functionValue: json["functionValue"] ?? '',
delaySeconds: json["delaySeconds"] ?? 0,
@ -145,8 +142,7 @@ class Condition {
required this.expr,
});
factory Condition.fromRawJson(String str) =>
Condition.fromJson(json.decode(str));
factory Condition.fromRawJson(String str) => Condition.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
@ -204,8 +200,7 @@ class EffectiveTime {
required this.loops,
});
factory EffectiveTime.fromRawJson(String str) =>
EffectiveTime.fromJson(json.decode(str));
factory EffectiveTime.fromRawJson(String str) => EffectiveTime.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());

View File

@ -1,29 +1,31 @@
import 'dart:convert';
import 'dart:typed_data';
class ScenesModel {
final String id;
final String name;
final String status;
final String type;
final String icon;
ScenesModel({
required this.id,
required this.name,
required this.status,
required this.type,
});
ScenesModel(
{required this.id,
required this.name,
required this.status,
required this.type,
required this.icon});
factory ScenesModel.fromRawJson(String str) =>
ScenesModel.fromJson(json.decode(str));
factory ScenesModel.fromRawJson(String str) => ScenesModel.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
Uint8List get iconInBytes => base64Decode(icon);
factory ScenesModel.fromJson(Map<String, dynamic> json) => ScenesModel(
id: json["id"],
name: json["name"] ?? '',
status: json["status"] ?? '',
type: json["type"] ?? '',
);
id: json["id"],
name: json["name"] ?? '',
status: json["status"] ?? '',
type: json["type"] ?? '',
icon: json["icon"] ?? '');
Map<String, dynamic> toJson() => {
"id": id,

View File

@ -1,15 +1,16 @@
import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
import 'package:syncrow_app/features/scene/enum/create_scene_enum.dart';
import 'package:syncrow_app/features/scene/view/scene_tasks_view.dart';
import 'package:syncrow_app/features/scene/widgets/alert_dialogs/icons_dialog.dart';
import 'package:syncrow_app/features/scene/widgets/effective_period_setting/effective_period_bottom_sheet.dart';
import 'package:syncrow_app/features/scene/widgets/scene_list_tile.dart';
import 'package:syncrow_app/features/shared_widgets/default_container.dart';
import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
import 'package:syncrow_app/utils/context_extension.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
class SceneAutoSettings extends StatelessWidget {
@ -17,14 +18,13 @@ class SceneAutoSettings extends StatelessWidget {
@override
Widget build(BuildContext context) {
final sceneSettings =
ModalRoute.of(context)!.settings.arguments as Map<String, dynamic>? ??
{};
final sceneSettings = ModalRoute.of(context)!.settings.arguments as Map<String, dynamic>? ?? {};
final sceneId = sceneSettings['sceneId'] as String? ?? '';
final isAutomation = context.read<CreateSceneBloc>().sceneType ==
CreateSceneEnum.deviceStatusChanges;
final isAutomation =
context.read<CreateSceneBloc>().sceneType == CreateSceneEnum.deviceStatusChanges;
final sceneName = sceneSettings['sceneName'] as String? ?? '';
bool showInDevice = context.read<CreateSceneBloc>().showInDeviceScreen;
String selectedIcon = '';
return DefaultScaffold(
title: 'Settings',
padding: EdgeInsets.zero,
@ -35,44 +35,81 @@ class SceneAutoSettings extends StatelessWidget {
icon: const Icon(
Icons.arrow_back_ios,
)),
child: BlocProvider(
create: (BuildContext context) =>
CreateSceneBloc()..add(SceneIconEvent()),
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(
builder: (context, state) {
return SizedBox(
height: MediaQuery.sizeOf(context).height,
child: Column(
children: [
DefaultContainer(
child: Padding(
padding: const EdgeInsets.only(
top: 10, left: 10, right: 10, bottom: 10),
child: Column(
children: [
InkWell(
onTap: () {
showDialog(
context: context,
builder: (context) {
return SecondDialog(
WidgetList: BlocBuilder<CreateSceneBloc,
CreateSceneState>(
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(builder: (context, state) {
if (state is AddSceneTask) {
showInDevice = state.showInDevice ?? false;
}
return SizedBox(
height: MediaQuery.sizeOf(context).height,
child: Column(
children: [
if (!isAutomation)
DefaultContainer(
child: Padding(
padding: const EdgeInsets.only(top: 10, left: 10, right: 10, bottom: 10),
child: Column(
children: [
InkWell(
onTap: () {
showDialog(
context: context,
builder: (context) {
BlocProvider.of<CreateSceneBloc>(context).add(SceneIconEvent());
return IconsDialog(
widgetList: Container(
height: MediaQuery.sizeOf(context).height * 0.4,
width: MediaQuery.sizeOf(context).width,
padding: const EdgeInsets.all(24),
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(
builder: (context, state) {
if (state is CreateSceneLoading) {
return CircularProgressIndicator();
} else if (state is CreateSceneLoaded) {
return Container(
child: ListView.builder(
itemCount:
state.iconModels.length,
itemBuilder: (context, index) {
final iconModel =
state.iconModels[index];
return Image.memory(
iconModel.iconBytes);
},
return const Center(
child: SizedBox(
height: 50,
width: 50,
child: CircularProgressIndicator()),
);
} else if (state is AddSceneTask) {
return GridView.builder(
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 5,
crossAxisSpacing: 12,
mainAxisSpacing: 12,
),
itemCount: state.iconModels?.length ?? 0,
itemBuilder: (context, index) {
final iconModel = state.iconModels![index];
return InkWell(
onTap: () {
BlocProvider.of<CreateSceneBloc>(context).add(
IconSelected(
iconId: iconModel.uuid,
confirmSelection: false));
selectedIcon = iconModel.uuid;
},
child: ClipOval(
child: Container(
padding: const EdgeInsets.all(1),
decoration: BoxDecoration(
border: Border.all(
color: state.selectedIcon == iconModel.uuid
? ColorsManager.primaryColorWithOpacity
: Colors.transparent,
width: 2,
),
shape: BoxShape.circle,
),
child: Image.memory(
iconModel.iconBytes,
width: 35,
height: 35,
),
),
),
);
},
);
} else if (state is CreateSceneError) {
return Text(state.message);
@ -81,258 +118,140 @@ class SceneAutoSettings extends StatelessWidget {
}
},
),
cancelTab: () {
Navigator.of(context).pop();
},
confirmTab: (v) {
Navigator.of(context).pop();
},
title: 'Icons',
onTapLabel1: (selected) {},
);
},
);
},
child: const Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
BodyMedium(text: 'Icons'),
Icon(
Icons.arrow_forward_ios_outlined,
color: ColorsManager.textGray,
size: 15,
)
],
),
),
const SizedBox(
height: 5,
),
const Divider(
color: ColorsManager.graysColor,
),
const SizedBox(
height: 5,
),
Row(
),
cancelTab: () {
Navigator.of(context).pop();
},
confirmTab: () {
BlocProvider.of<CreateSceneBloc>(context).add(
IconSelected(iconId: selectedIcon, confirmSelection: true));
Navigator.of(context).pop();
},
title: 'Icons',
);
},
);
},
child: const Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const BodyMedium(text: 'Show on devices page'),
Container(
width: 100,
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
height: 30,
width: 1,
color: ColorsManager.graysColor,
),
Transform.scale(
scale: .8,
child: CupertinoSwitch(
value: true,
onChanged: (value) {},
applyTheme: true,
),
),
],
),
BodyMedium(text: 'Icons'),
Icon(
Icons.arrow_forward_ios_outlined,
color: ColorsManager.textGray,
size: 15,
)
],
),
const SizedBox(
height: 5,
),
const Divider(
color: ColorsManager.graysColor,
),
SizedBox(
height: 5,
),
const Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
//Cloud
BodyMedium(text: 'Executed by'),
Text('Cloud',
style: TextStyle(
color: ColorsManager.textGray,
)),
],
),
],
),
)),
// Padding(
// padding: const EdgeInsets.symmetric(vertical: 16),
// child: DefaultContainer(
// child: Column(
// mainAxisSize: MainAxisSize.min,
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// const SizedBox(
// height: 8,
// ),
// Visibility(
// visible: isAutomation,
// child: SceneListTile(
// padding: const EdgeInsets.symmetric(
// horizontal: 16, vertical: 8),
// titleString: "Effective Period",
// trailingWidget:
// const Icon(Icons.arrow_forward_ios_rounded),
// onPressed: () {
// context.customBottomSheet(
// child: const EffectPeriodBottomSheetContent(),
// );
// },
// ),
// ),
// Visibility(
// visible: sceneName.isNotEmpty && isAutomation,
// child: SizedBox(
// width: context.width * 0.9,
// child: const Divider(
// color: ColorsManager.greyColor,
// ),
// ),
// ),
// Visibility(
// visible: sceneName.isNotEmpty,
// child: DeleteBottomSheetContent(
// isAutomation: isAutomation,
// sceneId: sceneId,
// ),
// ),
// const SizedBox(
// height: 16,
// ),
// ],
// ),
// ),
// ),
],
),
);
})));
}
}
class SecondDialog extends StatefulWidget {
final String title;
Widget WidgetList;
final Function(String)? onTapLabel1;
final Function()? cancelTab;
final Function(int selectedSecond)? confirmTab;
SecondDialog({
required this.WidgetList,
required this.title,
this.onTapLabel1,
required this.cancelTab,
required this.confirmTab,
});
@override
_SecondDialogState createState() => _SecondDialogState();
}
class _SecondDialogState extends State<SecondDialog> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return AlertDialog(
contentPadding: EdgeInsets.zero,
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const SizedBox(
height: 10,
),
BodyLarge(
text: widget.title,
fontWeight: FontWeight.w700,
fontColor: ColorsManager.primaryColor,
fontSize: 16,
),
const Padding(
padding: EdgeInsets.only(left: 15, right: 15),
child: Divider(
color: ColorsManager.textGray,
),
),
Expanded(child: widget.WidgetList),
Row(
children: [
Expanded(
child: Container(
decoration: const BoxDecoration(
border: Border(
right: BorderSide(
color: ColorsManager.textGray,
width: 0.5,
),
top: BorderSide(
color: ColorsManager.textGray,
width: 1.0,
),
const SizedBox(
height: 5,
),
const Divider(
color: ColorsManager.graysColor,
),
const SizedBox(
height: 5,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const BodyMedium(text: 'Show on devices page'),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
height: 30,
width: 1,
color: ColorsManager.graysColor,
),
Transform.scale(
scale: .8,
child: CupertinoSwitch(
value: showInDevice,
onChanged: (value) {
BlocProvider.of<CreateSceneBloc>(context)
.add(ShowOnDeviceClicked(value: value));
},
applyTheme: true,
),
),
],
)
],
),
const SizedBox(
height: 5,
),
const Divider(
color: ColorsManager.graysColor,
),
const SizedBox(
height: 5,
),
const Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
//Cloud
BodyMedium(text: 'Executed by'),
Text('Cloud',
style: TextStyle(
color: ColorsManager.textGray,
)),
],
),
],
),
)),
child: SizedBox(
child: InkWell(
onTap: widget.cancelTab,
child: const Padding(
padding: EdgeInsets.all(15),
child: Center(
child: Text(
'Cancel',
style: TextStyle(
color: ColorsManager.textGray,
fontSize: 14,
fontWeight: FontWeight.w400),
if (isAutomation)
DefaultContainer(
padding: const EdgeInsets.symmetric(
horizontal: 8,
),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
children: [
const SizedBox(
height: 8,
),
Visibility(
visible: isAutomation,
child: SceneListTile(
titleString: "Effective Period",
trailingWidget: const Icon(Icons.arrow_forward_ios_rounded),
onPressed: () {
context.customBottomSheet(
child: const EffectPeriodBottomSheetContent(),
);
},
),
),
),
Visibility(
visible: sceneName.isNotEmpty && isAutomation,
child: SizedBox(
width: context.width * 0.9,
child: const Divider(
color: ColorsManager.greyColor,
),
),
),
Visibility(
visible: sceneName.isNotEmpty,
child: DeleteBottomSheetContent(
isAutomation: isAutomation,
sceneId: sceneId,
),
),
const SizedBox(
height: 16,
),
],
),
),
),
),
Expanded(
child: Container(
decoration: const BoxDecoration(
border: Border(
left: BorderSide(
color: ColorsManager.textGray,
width: 0.5,
),
top: BorderSide(
color: ColorsManager.textGray,
width: 1.0,
),
)),
child: InkWell(
onTap: () {},
child: const Padding(
padding: EdgeInsets.all(15),
child: Center(
child: Text(
'Confirm',
style: TextStyle(
color: ColorsManager.primaryColor,
fontSize: 14,
fontWeight: FontWeight.w400),
),
),
)),
))
],
)
],
),
);
],
),
);
}));
}
}

View File

@ -21,35 +21,32 @@ class SceneView extends StatelessWidget {
Widget build(BuildContext context) {
return BlocProvider(
create: (BuildContext context) => SceneBloc()
..add(LoadScenes(HomeCubit.getInstance().selectedSpace?.id ?? ''))
..add(LoadScenes(HomeCubit.getInstance().selectedSpace?.id ?? '', showInDevice: pageType))
..add(LoadAutomation(HomeCubit.getInstance().selectedSpace?.id ?? '')),
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(
builder: (context, state) {
if (state is DeleteSceneSuccess) {
if (state.success) {
BlocProvider.of<SceneBloc>(context)
.add(LoadScenes(HomeCubit.getInstance().selectedSpace!.id!));
BlocProvider.of<SceneBloc>(context).add(
LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!));
LoadScenes(HomeCubit.getInstance().selectedSpace!.id!, showInDevice: pageType));
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!));
context
.read<SmartSceneSelectBloc>()
.add(const SmartSceneClearEvent());
LoadScenes(HomeCubit.getInstance().selectedSpace!.id!, showInDevice: pageType));
BlocProvider.of<SceneBloc>(context)
.add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!));
context.read<SmartSceneSelectBloc>().add(const SmartSceneClearEvent());
}
}
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
@ -86,30 +83,25 @@ class SceneView extends StatelessWidget {
child: ListView(
children: [
Theme(
data: ThemeData().copyWith(
dividerColor: Colors.transparent),
data: ThemeData()
.copyWith(dividerColor: Colors.transparent),
child: ExpansionTile(
tilePadding:
const EdgeInsets.symmetric(
horizontal: 6),
tilePadding: const EdgeInsets.symmetric(horizontal: 6),
initiallyExpanded: true,
iconColor: ColorsManager.grayColor,
title: const BodyMedium(
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,
loadingStates: state
.loadingStates, // Add this line
loadingStates:
state.loadingStates, // Add this line
)
: const Center(
child: BodyMedium(
text:
'No scenes have been added yet',
text: 'No scenes have been added yet',
),
),
const SizedBox(
@ -119,30 +111,25 @@ class SceneView extends StatelessWidget {
),
),
Theme(
data: ThemeData().copyWith(
dividerColor: Colors.transparent),
data: ThemeData()
.copyWith(dividerColor: Colors.transparent),
child: ExpansionTile(
initiallyExpanded: true,
iconColor: ColorsManager.grayColor,
tilePadding:
const EdgeInsets.symmetric(
horizontal: 6),
title: const BodyMedium(
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,
loadingStates: state
.loadingStates, // Add this line
loadingStates:
state.loadingStates, // Add this line
)
: const Center(
child: BodyMedium(
text:
'No automations have been added yet',
text: 'No automations have been added yet',
),
),
const SizedBox(

View File

@ -0,0 +1,111 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
class IconsDialog extends StatelessWidget {
final String title;
final Widget widgetList;
final Function()? cancelTab;
final Function()? confirmTab;
const IconsDialog({
super.key,
required this.widgetList,
required this.title,
required this.cancelTab,
required this.confirmTab,
});
@override
Widget build(BuildContext context) {
return AlertDialog(
contentPadding: EdgeInsets.zero,
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const SizedBox(
height: 10,
),
BodyLarge(
text: title,
fontWeight: FontWeight.w700,
fontColor: ColorsManager.primaryColor,
fontSize: 16,
),
const Padding(
padding: EdgeInsets.only(left: 15, right: 15),
child: Divider(
color: ColorsManager.textGray,
),
),
widgetList,
Row(
children: [
Expanded(
child: Container(
decoration: const BoxDecoration(
border: Border(
right: BorderSide(
color: ColorsManager.textGray,
width: 0.5,
),
top: BorderSide(
color: ColorsManager.textGray,
width: 1.0,
),
)),
child: SizedBox(
child: InkWell(
onTap: cancelTab,
child: const Padding(
padding: EdgeInsets.all(15),
child: Center(
child: Text(
'Cancel',
style: TextStyle(
color: ColorsManager.textGray,
fontSize: 14,
fontWeight: FontWeight.w400),
),
),
),
),
),
),
),
Expanded(
child: Container(
decoration: const BoxDecoration(
border: Border(
left: BorderSide(
color: ColorsManager.textGray,
width: 0.5,
),
top: BorderSide(
color: ColorsManager.textGray,
width: 1.0,
),
)),
child: InkWell(
onTap: confirmTab!,
child: const Padding(
padding: EdgeInsets.all(15),
child: Center(
child: Text(
'Confirm',
style: TextStyle(
color: ColorsManager.primaryColor,
fontSize: 14,
fontWeight: FontWeight.w400),
),
),
)),
))
],
)
],
),
);
}
}

View File

@ -1,6 +1,7 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_bloc.dart';
@ -37,8 +38,8 @@ class SceneItem extends StatelessWidget {
onTap: () {
context.read<SmartSceneSelectBloc>().add(const SmartSceneClearEvent());
if (disablePlayButton == false) {
BlocProvider.of<CreateSceneBloc>(context).add(
FetchSceneTasksEvent(sceneId: scene.id, isAutomation: false));
BlocProvider.of<CreateSceneBloc>(context)
.add(FetchSceneTasksEvent(sceneId: scene.id, isAutomation: false));
/// the state to set the scene type must be after the fetch
BlocProvider.of<CreateSceneBloc>(context)
@ -72,19 +73,22 @@ class SceneItem extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Image.asset(
height: 32,
width: 32,
Assets.assetsIconsLogo,
fit: BoxFit.fill,
),
if (!disablePlayButton)
Image.memory(
height: 32,
width: 32,
scene.iconInBytes,
fit: BoxFit.fill,
errorBuilder: (context, error, stackTrace) =>
Image.asset(height: 32, width: 32, fit: BoxFit.fill, Assets.assetsIconsLogo),
),
if (disablePlayButton)
SvgPicture.asset(height: 32, width: 32, fit: BoxFit.fill, Assets.automationIcon),
disablePlayButton == false
? IconButton(
padding: EdgeInsets.zero,
onPressed: () {
context
.read<SceneBloc>()
.add(SceneTrigger(scene.id, scene.name));
context.read<SceneBloc>().add(SceneTrigger(scene.id, scene.name));
},
icon: isLoading
? const Center(
@ -106,15 +110,11 @@ class SceneItem extends StatelessWidget {
activeColor: ColorsManager.primaryColor,
value: scene.status == 'enable' ? true : false,
onChanged: (value) {
context.read<SceneBloc>().add(
UpdateAutomationStatus(
automationStatusUpdate:
AutomationStatusUpdate(
isEnable: value,
unitUuid: HomeCubit.getInstance()
.selectedSpace!
.id!),
automationId: scene.id));
context.read<SceneBloc>().add(UpdateAutomationStatus(
automationStatusUpdate: AutomationStatusUpdate(
isEnable: value,
unitUuid: HomeCubit.getInstance().selectedSpace!.id!),
automationId: scene.id));
},
),
],

View File

@ -3,8 +3,7 @@ class Assets {
/// Assets for assetsFontsAftikaRegular
/// assets/fonts/AftikaRegular.ttf
static const String assetsFontsAftikaRegular =
"assets/fonts/AftikaRegular.ttf";
static const String assetsFontsAftikaRegular = "assets/fonts/AftikaRegular.ttf";
/// Assets for assetsIcons3GangSwitch
/// assets/icons/3GangSwitch.svg
@ -20,98 +19,82 @@ class Assets {
/// Assets for assetsIconsAutomatedClock
/// assets/icons/automated_clock.svg
static const String assetsIconsAutomatedClock =
"assets/icons/automated_clock.svg";
static const String assetsIconsAutomatedClock = "assets/icons/automated_clock.svg";
static const String acSwitchIcon = "assets/icons/ac_switch_ic.svg";
/// Assets for assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstChargeddmOff
/// assets/icons/battery/dmOff/perOffchargOfflowOffpmOffstChargeddmOff.svg
static const String
assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstChargeddmOff =
static const String assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstChargeddmOff =
"assets/icons/battery/dmOff/perOffchargOfflowOffpmOffstChargeddmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstDefaultdmOff
/// assets/icons/battery/dmOff/perOffchargOfflowOffpmOffstDefaultdmOff.svg
static const String
assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstDefaultdmOff =
static const String assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstDefaultdmOff =
"assets/icons/battery/dmOff/perOffchargOfflowOffpmOffstDefaultdmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOffchargOfflowOffpmOnstChargeddmOff
/// assets/icons/battery/dmOff/perOffchargOfflowOffpmOnstChargeddmOff.svg
static const String
assetsIconsBatteryDmOffPerOffchargOfflowOffpmOnstChargeddmOff =
static const String assetsIconsBatteryDmOffPerOffchargOfflowOffpmOnstChargeddmOff =
"assets/icons/battery/dmOff/perOffchargOfflowOffpmOnstChargeddmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOffchargOfflowOnpmOffstDefaultdmOff
/// assets/icons/battery/dmOff/perOffchargOfflowOnpmOffstDefaultdmOff.svg
static const String
assetsIconsBatteryDmOffPerOffchargOfflowOnpmOffstDefaultdmOff =
static const String assetsIconsBatteryDmOffPerOffchargOfflowOnpmOffstDefaultdmOff =
"assets/icons/battery/dmOff/perOffchargOfflowOnpmOffstDefaultdmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOffchargOfflowOnpmOnstDefaultdmOff
/// assets/icons/battery/dmOff/perOffchargOfflowOnpmOnstDefaultdmOff.svg
static const String
assetsIconsBatteryDmOffPerOffchargOfflowOnpmOnstDefaultdmOff =
static const String assetsIconsBatteryDmOffPerOffchargOfflowOnpmOnstDefaultdmOff =
"assets/icons/battery/dmOff/perOffchargOfflowOnpmOnstDefaultdmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOffchargOnlowOffpmOffstChargeddmOff
/// assets/icons/battery/dmOff/perOffchargOnlowOffpmOffstChargeddmOff.svg
static const String
assetsIconsBatteryDmOffPerOffchargOnlowOffpmOffstChargeddmOff =
static const String assetsIconsBatteryDmOffPerOffchargOnlowOffpmOffstChargeddmOff =
"assets/icons/battery/dmOff/perOffchargOnlowOffpmOffstChargeddmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOffchargOnlowOnpmOffstlowBatterydmOff
/// assets/icons/battery/dmOff/perOffchargOnlowOnpmOffstlowBatterydmOff.svg
static const String
assetsIconsBatteryDmOffPerOffchargOnlowOnpmOffstlowBatterydmOff =
static const String assetsIconsBatteryDmOffPerOffchargOnlowOnpmOffstlowBatterydmOff =
"assets/icons/battery/dmOff/perOffchargOnlowOnpmOffstlowBatterydmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOffchargOnlowOnpmOnstlowpmdmOff
/// assets/icons/battery/dmOff/perOffchargOnlowOnpmOnstlowpmdmOff.svg
static const String
assetsIconsBatteryDmOffPerOffchargOnlowOnpmOnstlowpmdmOff =
static const String assetsIconsBatteryDmOffPerOffchargOnlowOnpmOnstlowpmdmOff =
"assets/icons/battery/dmOff/perOffchargOnlowOnpmOnstlowpmdmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstChargeddmOff
/// assets/icons/battery/dmOff/perOnchargOfflowOffpmOffstChargeddmOff.svg
static const String
assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstChargeddmOff =
static const String assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstChargeddmOff =
"assets/icons/battery/dmOff/perOnchargOfflowOffpmOffstChargeddmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstDefaultdmOff
/// assets/icons/battery/dmOff/perOnchargOfflowOffpmOffstDefaultdmOff.svg
static const String
assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstDefaultdmOff =
static const String assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstDefaultdmOff =
"assets/icons/battery/dmOff/perOnchargOfflowOffpmOffstDefaultdmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOnchargOfflowOffpmOnstChargeddmOff
/// assets/icons/battery/dmOff/perOnchargOfflowOffpmOnstChargeddmOff.svg
static const String
assetsIconsBatteryDmOffPerOnchargOfflowOffpmOnstChargeddmOff =
static const String assetsIconsBatteryDmOffPerOnchargOfflowOffpmOnstChargeddmOff =
"assets/icons/battery/dmOff/perOnchargOfflowOffpmOnstChargeddmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOnchargOfflowOnpmOffstDefaultdmOff
/// assets/icons/battery/dmOff/perOnchargOfflowOnpmOffstDefaultdmOff.svg
static const String
assetsIconsBatteryDmOffPerOnchargOfflowOnpmOffstDefaultdmOff =
static const String assetsIconsBatteryDmOffPerOnchargOfflowOnpmOffstDefaultdmOff =
"assets/icons/battery/dmOff/perOnchargOfflowOnpmOffstDefaultdmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOnchargOfflowOnpmOnstDefaultdmOff
/// assets/icons/battery/dmOff/perOnchargOfflowOnpmOnstDefaultdmOff.svg
static const String
assetsIconsBatteryDmOffPerOnchargOfflowOnpmOnstDefaultdmOff =
static const String assetsIconsBatteryDmOffPerOnchargOfflowOnpmOnstDefaultdmOff =
"assets/icons/battery/dmOff/perOnchargOfflowOnpmOnstDefaultdmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOnchargOnlowOffpmOffstChargeddmOff
/// assets/icons/battery/dmOff/perOnchargOnlowOffpmOffstChargeddmOff.svg
static const String
assetsIconsBatteryDmOffPerOnchargOnlowOffpmOffstChargeddmOff =
static const String assetsIconsBatteryDmOffPerOnchargOnlowOffpmOffstChargeddmOff =
"assets/icons/battery/dmOff/perOnchargOnlowOffpmOffstChargeddmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOnchargOnlowOnpmOffstlowBatterydmOff
/// assets/icons/battery/dmOff/perOnchargOnlowOnpmOffstlowBatterydmOff.svg
static const String
assetsIconsBatteryDmOffPerOnchargOnlowOnpmOffstlowBatterydmOff =
static const String assetsIconsBatteryDmOffPerOnchargOnlowOnpmOffstlowBatterydmOff =
"assets/icons/battery/dmOff/perOnchargOnlowOnpmOffstlowBatterydmOff.svg";
/// Assets for assetsIconsBatteryDmOffPerOnchargOnlowOnpmOnstlowpmdmOff
@ -121,44 +104,37 @@ class Assets {
/// Assets for assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstChargeddmOn
/// assets/icons/battery/dmOn/perOffchargOfflowOffpmOffstChargeddmOn.svg
static const String
assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstChargeddmOn =
static const String assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstChargeddmOn =
"assets/icons/battery/dmOn/perOffchargOfflowOffpmOffstChargeddmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstDefaultdmOn
/// assets/icons/battery/dmOn/perOffchargOfflowOffpmOffstDefaultdmOn.svg
static const String
assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstDefaultdmOn =
static const String assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstDefaultdmOn =
"assets/icons/battery/dmOn/perOffchargOfflowOffpmOffstDefaultdmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOffchargOfflowOffpmOnstChargeddmOn
/// assets/icons/battery/dmOn/perOffchargOfflowOffpmOnstChargeddmOn.svg
static const String
assetsIconsBatteryDmOnPerOffchargOfflowOffpmOnstChargeddmOn =
static const String assetsIconsBatteryDmOnPerOffchargOfflowOffpmOnstChargeddmOn =
"assets/icons/battery/dmOn/perOffchargOfflowOffpmOnstChargeddmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOffchargOfflowOnpmOffstDefaultdmOn
/// assets/icons/battery/dmOn/perOffchargOfflowOnpmOffstDefaultdmOn.svg
static const String
assetsIconsBatteryDmOnPerOffchargOfflowOnpmOffstDefaultdmOn =
static const String assetsIconsBatteryDmOnPerOffchargOfflowOnpmOffstDefaultdmOn =
"assets/icons/battery/dmOn/perOffchargOfflowOnpmOffstDefaultdmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOffchargOfflowOnpmOnstDefaultdmOn
/// assets/icons/battery/dmOn/perOffchargOfflowOnpmOnstDefaultdmOn.svg
static const String
assetsIconsBatteryDmOnPerOffchargOfflowOnpmOnstDefaultdmOn =
static const String assetsIconsBatteryDmOnPerOffchargOfflowOnpmOnstDefaultdmOn =
"assets/icons/battery/dmOn/perOffchargOfflowOnpmOnstDefaultdmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOffchargOnlowOffpmOffstChargeddmOn
/// assets/icons/battery/dmOn/perOffchargOnlowOffpmOffstChargeddmOn.svg
static const String
assetsIconsBatteryDmOnPerOffchargOnlowOffpmOffstChargeddmOn =
static const String assetsIconsBatteryDmOnPerOffchargOnlowOffpmOffstChargeddmOn =
"assets/icons/battery/dmOn/perOffchargOnlowOffpmOffstChargeddmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOffchargOnlowOnpmOffstlowBatterydmOn
/// assets/icons/battery/dmOn/perOffchargOnlowOnpmOffstlowBatterydmOn.svg
static const String
assetsIconsBatteryDmOnPerOffchargOnlowOnpmOffstlowBatterydmOn =
static const String assetsIconsBatteryDmOnPerOffchargOnlowOnpmOffstlowBatterydmOn =
"assets/icons/battery/dmOn/perOffchargOnlowOnpmOffstlowBatterydmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOffchargOnlowOnpmOnstlowpmdmOn
@ -168,44 +144,37 @@ class Assets {
/// Assets for assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstChargeddmOn
/// assets/icons/battery/dmOn/perOnchargOfflowOffpmOffstChargeddmOn.svg
static const String
assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstChargeddmOn =
static const String assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstChargeddmOn =
"assets/icons/battery/dmOn/perOnchargOfflowOffpmOffstChargeddmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstDefaultdmOn
/// assets/icons/battery/dmOn/perOnchargOfflowOffpmOffstDefaultdmOn.svg
static const String
assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstDefaultdmOn =
static const String assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstDefaultdmOn =
"assets/icons/battery/dmOn/perOnchargOfflowOffpmOffstDefaultdmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOnchargOfflowOffpmOnstChargeddmOn
/// assets/icons/battery/dmOn/perOnchargOfflowOffpmOnstChargeddmOn.svg
static const String
assetsIconsBatteryDmOnPerOnchargOfflowOffpmOnstChargeddmOn =
static const String assetsIconsBatteryDmOnPerOnchargOfflowOffpmOnstChargeddmOn =
"assets/icons/battery/dmOn/perOnchargOfflowOffpmOnstChargeddmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOnchargOfflowOnpmOffstDefaultdmOn
/// assets/icons/battery/dmOn/perOnchargOfflowOnpmOffstDefaultdmOn.svg
static const String
assetsIconsBatteryDmOnPerOnchargOfflowOnpmOffstDefaultdmOn =
static const String assetsIconsBatteryDmOnPerOnchargOfflowOnpmOffstDefaultdmOn =
"assets/icons/battery/dmOn/perOnchargOfflowOnpmOffstDefaultdmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOnchargOfflowOnpmOnstDefaultdmOn
/// assets/icons/battery/dmOn/perOnchargOfflowOnpmOnstDefaultdmOn.svg
static const String
assetsIconsBatteryDmOnPerOnchargOfflowOnpmOnstDefaultdmOn =
static const String assetsIconsBatteryDmOnPerOnchargOfflowOnpmOnstDefaultdmOn =
"assets/icons/battery/dmOn/perOnchargOfflowOnpmOnstDefaultdmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOnchargOnlowOffpmOffstChargeddmOn
/// assets/icons/battery/dmOn/perOnchargOnlowOffpmOffstChargeddmOn.svg
static const String
assetsIconsBatteryDmOnPerOnchargOnlowOffpmOffstChargeddmOn =
static const String assetsIconsBatteryDmOnPerOnchargOnlowOffpmOffstChargeddmOn =
"assets/icons/battery/dmOn/perOnchargOnlowOffpmOffstChargeddmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOnchargOnlowOnpmOffstlowBatterydmOn
/// assets/icons/battery/dmOn/perOnchargOnlowOnpmOffstlowBatterydmOn.svg
static const String
assetsIconsBatteryDmOnPerOnchargOnlowOnpmOffstlowBatterydmOn =
static const String assetsIconsBatteryDmOnPerOnchargOnlowOnpmOffstlowBatterydmOn =
"assets/icons/battery/dmOn/perOnchargOnlowOnpmOffstlowBatterydmOn.svg";
/// Assets for assetsIconsBatteryDmOnPerOnchargOnlowOnpmOnstlowpmdmOn
@ -249,8 +218,7 @@ class Assets {
static const String assetsIconsCurtainsIconVerticalBlade =
"assets/icons/curtainsIcon/left_vertical_blade.svg";
static const String rightVerticalBlade =
"assets/icons/curtainsIcon/right_vertical_blade.svg";
static const String rightVerticalBlade = "assets/icons/curtainsIcon/right_vertical_blade.svg";
/// Assets for assetsIconsDashboard
/// assets/icons/dashboard.svg
@ -260,8 +228,7 @@ class Assets {
/// Assets for assetsIconsDashboardFill
/// assets/icons/dashboard-fill.svg
static const String assetsIconsDashboardFill =
"assets/icons/dashboard-fill.svg";
static const String assetsIconsDashboardFill = "assets/icons/dashboard-fill.svg";
/// Assets for assetsIconsDevices
/// assets/icons/Devices.svg
@ -277,8 +244,7 @@ class Assets {
/// Assets for assetsIconsDoorLockLinkage
/// assets/icons/DoorLockLinkage.svg
static const String assetsIconsDoorLockLinkage =
"assets/icons/DoorLockLinkage.svg";
static const String assetsIconsDoorLockLinkage = "assets/icons/DoorLockLinkage.svg";
/// Assets for assetsIconsDoorLockLock
/// assets/icons/DoorLockLock.svg
@ -286,18 +252,15 @@ class Assets {
/// Assets for assetsIconsDoorLockMembers
/// assets/icons/DoorLockMembers.svg
static const String assetsIconsDoorLockMembers =
"assets/icons/DoorLockMembers.svg";
static const String assetsIconsDoorLockMembers = "assets/icons/DoorLockMembers.svg";
/// Assets for assetsIconsDoorLockPassword
/// assets/icons/DoorLockPassword.svg
static const String assetsIconsDoorLockPassword =
"assets/icons/DoorLockPassword.svg";
static const String assetsIconsDoorLockPassword = "assets/icons/DoorLockPassword.svg";
/// Assets for assetsIconsDoorLockRecords
/// assets/icons/DoorLockRecords.svg
static const String assetsIconsDoorLockRecords =
"assets/icons/DoorLockRecords.svg";
static const String assetsIconsDoorLockRecords = "assets/icons/DoorLockRecords.svg";
/// Assets for assetsIconsDoorlockAssetsBatteryIndicator
/// assets/icons/doorlock-assets/BatteryIndicator.svg
@ -318,8 +281,7 @@ class Assets {
/// assets/icons/doorlock-assets/lockIcon.svg
static const String assetsIconsDoorlockAssetsLockIcon =
"assets/icons/doorlock-assets/lockIcon.svg";
static const String doorUnlockIcon =
"assets/icons/doorlock-assets/door_un_look_ic.svg";
static const String doorUnlockIcon = "assets/icons/doorlock-assets/door_un_look_ic.svg";
/// Assets for assetsIconsDoorlockAssetsMembersManagement
/// assets/icons/doorlock-assets/members-management.svg
@ -407,13 +369,11 @@ class Assets {
/// Assets for assetsIconsLightSwitchOff
/// assets/icons/lightSwitchOff.svg
static const String assetsIconsLightSwitchOff =
"assets/icons/lightSwitchOff.svg";
static const String assetsIconsLightSwitchOff = "assets/icons/lightSwitchOff.svg";
/// Assets for assetsIconsLightSwitchOn
/// assets/icons/lightSwitchOn.svg
static const String assetsIconsLightSwitchOn =
"assets/icons/lightSwitchOn.svg";
static const String assetsIconsLightSwitchOn = "assets/icons/lightSwitchOn.svg";
/// Assets for assetsIconsLinkageIconsDoorLockAlarm
/// assets/icons/linkageIcons/doorLockAlarm.svg
@ -422,8 +382,7 @@ class Assets {
/// Assets for assetsIconsLinkTimeLimitedPasswordIcon
/// assets/icons/timeLimitedPasswordIcon.svg
static const String timeLimitedPasswordIcon =
"assets/icons/timeLimitedPasswordIcon.svg";
static const String timeLimitedPasswordIcon = "assets/icons/timeLimitedPasswordIcon.svg";
/// Assets for assetsIconsoneTimePassword
/// assets/icons/oneTimePassword.svg
@ -431,8 +390,7 @@ class Assets {
/// Assets for assetsIconsTimeLimitedPassword
/// assets/icons/timeLimitedPassword.svg
static const String timeLimitedPassword =
"assets/icons/timeLimitedPassword.svg";
static const String timeLimitedPassword = "assets/icons/timeLimitedPassword.svg";
/// Assets for assetsIconsNoValidPasswords
/// assets/icons/noValidPasswords.svg
@ -601,13 +559,11 @@ class Assets {
/// Assets for assetsIconsPresenceSensorAssetsParameterSettings
/// assets/icons/presence-sensor-assets/space_type_icon.svg
static const String spaceTypeIcon =
"assets/icons/presence-sensor-assets/space_type_icon.svg";
static const String spaceTypeIcon = "assets/icons/presence-sensor-assets/space_type_icon.svg";
/// Assets for assetsIconsPresenceSensorAssetsParameterSettings
/// assets/icons/presence-sensor-assets/space_type_icon.svg
static const String sensitivityIcon =
"assets/icons/presence-sensor-assets/Sensitivity.svg";
static const String sensitivityIcon = "assets/icons/presence-sensor-assets/Sensitivity.svg";
/// Assets for assetsIconsPresenceSensorAssetsParameterSettings
/// assets/icons/presence-sensor-assets/maximum_distance.svg
@ -640,8 +596,7 @@ class Assets {
/// Assets for assetsIconsRoutinesFill
/// assets/icons/Routines-fill.svg
static const String assetsIconsRoutinesFill =
"assets/icons/Routines-fill.svg";
static const String assetsIconsRoutinesFill = "assets/icons/Routines-fill.svg";
/// Assets for assetsIconsScan
/// assets/icons/Scan.svg
@ -673,8 +628,7 @@ class Assets {
/// Assets for assetsIconsSustainability
/// assets/icons/sustainability.svg
static const String assetsIconsSustainability =
"assets/icons/sustainability.svg";
static const String assetsIconsSustainability = "assets/icons/sustainability.svg";
/// Assets for assetsIconsUnlockingMethodsIconsFace
/// assets/icons/unlockingMethodsIcons/face.svg
@ -770,8 +724,7 @@ class Assets {
/// Assets for assetsImagesHorizintalBlade
/// assets/images/HorizintalBlade.png
static const String assetsImagesHorizintalBlade =
"assets/images/HorizintalBlade.png";
static const String assetsImagesHorizintalBlade = "assets/images/HorizintalBlade.png";
/// Assets for assetsImagesLogo
/// assets/images/Logo.svg
@ -779,8 +732,7 @@ class Assets {
/// Assets for assetsImagesLogoHorizontal
/// assets/images/logo_horizontal.png
static const String assetsImagesLogoHorizontal =
"assets/images/logo_horizontal.png";
static const String assetsImagesLogoHorizontal = "assets/images/logo_horizontal.png";
/// Assets for assetsImagesPause
/// assets/images/Pause.png
@ -810,8 +762,7 @@ class Assets {
/// assets/images/Window.png
static const String assetsImagesWindow = "assets/images/window_img.svg";
static const String assetsSensitivityFunction =
"assets/icons/functions_icons/sensitivity.svg";
static const String assetsSensitivityFunction = "assets/icons/functions_icons/sensitivity.svg";
//assets/icons/functions_icons/sesitivity_operation_icon.svg
static const String assetsSensitivityOperationIcon =
@ -819,73 +770,59 @@ class Assets {
//assets/icons/functions_icons/ac_power.svg
static const String assetsAcPower =
"assets/icons/functions_icons/ac_power.svg";
static const String assetsAcPower = "assets/icons/functions_icons/ac_power.svg";
//assets/icons/functions_icons/ac_power_off.svg
static const String assetsAcPowerOFF =
"assets/icons/functions_icons/ac_power_off.svg";
static const String assetsAcPowerOFF = "assets/icons/functions_icons/ac_power_off.svg";
//assets/icons/functions_icons/child_lock.svg
static const String assetsChildLock =
"assets/icons/functions_icons/child_lock.svg";
static const String assetsChildLock = "assets/icons/functions_icons/child_lock.svg";
//assets/icons/functions_icons/cooling.svg
static const String assetsFreezing =
"assets/icons/functions_icons/freezing.svg";
static const String assetsFreezing = "assets/icons/functions_icons/freezing.svg";
//assets/icons/functions_icons/fan_speed.svg
static const String assetsFanSpeed =
"assets/icons/functions_icons/fan_speed.svg";
static const String assetsFanSpeed = "assets/icons/functions_icons/fan_speed.svg";
//assets/icons/functions_icons/ac_cooling.svg
static const String assetsAcCooling =
"assets/icons/functions_icons/ac_cooling.svg";
static const String assetsAcCooling = "assets/icons/functions_icons/ac_cooling.svg";
//assets/icons/functions_icons/ac_heating.svg
static const String assetsAcHeating =
"assets/icons/functions_icons/ac_heating.svg";
static const String assetsAcHeating = "assets/icons/functions_icons/ac_heating.svg";
//assets/icons/functions_icons/celsius_degrees.svg
static const String assetsCelsiusDegrees =
"assets/icons/functions_icons/celsius_degrees.svg";
static const String assetsCelsiusDegrees = "assets/icons/functions_icons/celsius_degrees.svg";
//assets/icons/functions_icons/tempreture.svg
static const String assetsTempreture =
"assets/icons/functions_icons/tempreture.svg";
static const String assetsTempreture = "assets/icons/functions_icons/tempreture.svg";
//assets/icons/functions_icons/ac_fan_low.svg
static const String assetsAcFanLow =
"assets/icons/functions_icons/ac_fan_low.svg";
static const String assetsAcFanLow = "assets/icons/functions_icons/ac_fan_low.svg";
//assets/icons/functions_icons/ac_fan_middle.svg
static const String assetsAcFanMiddle =
"assets/icons/functions_icons/ac_fan_middle.svg";
static const String assetsAcFanMiddle = "assets/icons/functions_icons/ac_fan_middle.svg";
//assets/icons/functions_icons/ac_fan_high.svg
static const String assetsAcFanHigh =
"assets/icons/functions_icons/ac_fan_high.svg";
static const String assetsAcFanHigh = "assets/icons/functions_icons/ac_fan_high.svg";
//assets/icons/functions_icons/ac_fan_auto.svg
static const String assetsAcFanAuto =
"assets/icons/functions_icons/ac_fan_auto.svg";
static const String assetsAcFanAuto = "assets/icons/functions_icons/ac_fan_auto.svg";
//assets/icons/functions_icons/scene_child_lock.svg
static const String assetsSceneChildLock =
"assets/icons/functions_icons/scene_child_lock.svg";
static const String assetsSceneChildLock = "assets/icons/functions_icons/scene_child_lock.svg";
//assets/icons/functions_icons/scene_child_unlock.svg
@ -894,18 +831,15 @@ class Assets {
//assets/icons/functions_icons/scene_refresh.svg
static const String assetsSceneRefresh =
"assets/icons/functions_icons/scene_refresh.svg";
static const String assetsSceneRefresh = "assets/icons/functions_icons/scene_refresh.svg";
//assets/icons/functions_icons/light_countdown.svg
static const String assetsLightCountdown =
"assets/icons/functions_icons/light_countdown.svg";
static const String assetsLightCountdown = "assets/icons/functions_icons/light_countdown.svg";
//assets/icons/functions_icons/far_detection.svg
static const String assetsFarDetection =
"assets/icons/functions_icons/far_detection.svg";
static const String assetsFarDetection = "assets/icons/functions_icons/far_detection.svg";
//assets/icons/functions_icons/far_detection_function.svg
@ -914,13 +848,11 @@ class Assets {
//assets/icons/functions_icons/indicator.svg
static const String assetsIndicator =
"assets/icons/functions_icons/indicator.svg";
static const String assetsIndicator = "assets/icons/functions_icons/indicator.svg";
//assets/icons/functions_icons/motion_detection.svg
static const String assetsMotionDetection =
"assets/icons/functions_icons/motion_detection.svg";
static const String assetsMotionDetection = "assets/icons/functions_icons/motion_detection.svg";
//assets/icons/functions_icons/motionless_detection.svg
@ -929,18 +861,15 @@ class Assets {
//assets/icons/functions_icons/nobody_time.svg
static const String assetsNobodyTime =
"assets/icons/functions_icons/nobody_time.svg";
static const String assetsNobodyTime = "assets/icons/functions_icons/nobody_time.svg";
//assets/icons/functions_icons/factory_reset.svg
static const String assetsFactoryReset =
"assets/icons/functions_icons/factory_reset.svg";
static const String assetsFactoryReset = "assets/icons/functions_icons/factory_reset.svg";
//assets/icons/functions_icons/master_state.svg
static const String assetsMasterState =
"assets/icons/functions_icons/master_state.svg";
static const String assetsMasterState = "assets/icons/functions_icons/master_state.svg";
//assets/icons/functions_icons/switch_alarm_sound.svg
@ -949,8 +878,7 @@ class Assets {
//assets/icons/functions_icons/reset_off.svg
static const String assetsResetOff =
"assets/icons/functions_icons/reset_off.svg";
static const String assetsResetOff = "assets/icons/functions_icons/reset_off.svg";
//assets/icons/functions_icons/automation_functions/card_unlock.svg
@ -1024,8 +952,7 @@ class Assets {
//assets/icons/functions_icons/automation_functions/motion.svg
static const String assetsMotion =
"assets/icons/functions_icons/automation_functions/motion.svg";
static const String assetsMotion = "assets/icons/functions_icons/automation_functions/motion.svg";
//assets/icons/functions_icons/automation_functions/current_temp.svg
@ -1047,33 +974,27 @@ class Assets {
static const String waterHeaterOn = "assets/icons/water_heater_on.svg";
static const String waterHeaterOff = "assets/icons/water_heater_off.svg";
static const String scheduleCelenderIcon =
"assets/icons/schedule_celender_icon.svg";
static const String scheduleCirculateIcon =
"assets/icons/schedule_circulate_icon.svg";
static const String scheduleInchingIcon =
"assets/icons/schedule_Inching_icon.svg";
static const String scheduleCelenderIcon = "assets/icons/schedule_celender_icon.svg";
static const String scheduleCirculateIcon = "assets/icons/schedule_circulate_icon.svg";
static const String scheduleInchingIcon = "assets/icons/schedule_Inching_icon.svg";
static const String scheduleTimeIcon = "assets/icons/schedule_time_icon.svg";
static const String waterHeaterIcon = "assets/icons/water_heater_icon.svg";
static const String doorOpen = "assets/icons/opened_door.svg";
static const String doorClose = "assets/icons/closed_door.svg";
static const String doorNotificationSetting =
"assets/icons/door_notification_setting_icon.svg";
static const String doorNotificationSetting = "assets/icons/door_notification_setting_icon.svg";
static const String doorRecordsIcon = "assets/icons/door_records_icon.svg";
static const String doorSensorIcon = "assets/icons/door_sensor_icon.svg";
static const String closedGarageIcon = "assets/icons/closed_garage_door.svg";
static const String openGarageIcon = "assets/icons/open_garage_door.svg";
static const String garageCountdown = "assets/icons/garage_countdown.svg";
static const String garagePreferencesIcon =
"assets/icons/garage_preferences_icon.svg";
static const String garagePreferencesIcon = "assets/icons/garage_preferences_icon.svg";
static const String garageSchedule = "assets/icons/garage_schedule.svg";
static const String garageIcon = "assets/icons/garageIcon.svg";
static const String normalWaterLeak = "assets/icons/normal_water_leak.svg";
static const String detectedWaterLeak =
"assets/icons/detected_water_leak.svg";
static const String detectedWaterLeak = "assets/icons/detected_water_leak.svg";
static const String waterLeakIcon = "assets/icons/waterleak_icon.svg";
static const String leakDetectedIcon = "assets/icons/leak_detected.svg";
@ -1089,6 +1010,7 @@ class Assets {
static const String voltageIcon = "assets/icons/voltage_icon.svg";
static const String speedoMeter = "assets/icons/speedo_meter.svg";
static const String powerClampIcon = "assets/icons/power_clamp.svg";
static const String automationIcon = "assets/icons/automation_ic.svg";
//powerClampIcon
}

View File

@ -1,7 +1,6 @@
import 'dart:math';
import 'package:syncrow_app/features/scene/model/create_automation_model.dart';
import 'package:syncrow_app/features/scene/model/create_scene_model.dart';
import 'package:syncrow_app/features/scene/model/icon_model.dart';
import 'package:syncrow_app/features/scene/model/scene_details_model.dart';
import 'package:syncrow_app/features/scene/model/scenes_model.dart';
import 'package:syncrow_app/features/scene/model/update_automation.dart';
@ -12,8 +11,7 @@ class SceneApi {
static final HTTPService _httpService = HTTPService();
//create scene
static Future<Map<String, dynamic>> createScene(
CreateSceneModel createSceneModel) async {
static Future<Map<String, dynamic>> createScene(CreateSceneModel createSceneModel) async {
try {
final response = await _httpService.post(
path: ApiEndpoints.createScene,
@ -49,10 +47,11 @@ class SceneApi {
//get scene by unit id
static Future<List<ScenesModel>> getScenesByUnitId(String unitId) async {
static Future<List<ScenesModel>> getScenesByUnitId(String unitId, {showInDevice = false}) async {
try {
final response = await _httpService.get(
path: ApiEndpoints.getUnitScenes.replaceAll('{unitUuid}', unitId),
queryParameters: {'showInHomePage': showInDevice},
showServerMessage: false,
expectedResponseModel: (json) {
List<ScenesModel> scenes = [];
@ -103,12 +102,10 @@ class SceneApi {
}
//automation details
static Future<SceneDetailsModel> getAutomationDetails(
String automationId) async {
static Future<SceneDetailsModel> getAutomationDetails(String automationId) async {
try {
final response = await _httpService.get(
path: ApiEndpoints.getAutomationDetails
.replaceAll('{automationId}', automationId),
path: ApiEndpoints.getAutomationDetails.replaceAll('{automationId}', automationId),
showServerMessage: false,
expectedResponseModel: (json) => SceneDetailsModel.fromJson(json),
);
@ -119,12 +116,11 @@ class SceneApi {
}
//updateAutomationStatus
static Future<bool> updateAutomationStatus(String automationId,
AutomationStatusUpdate createAutomationEnable) async {
static Future<bool> updateAutomationStatus(
String automationId, AutomationStatusUpdate createAutomationEnable) async {
try {
final response = await _httpService.put(
path: ApiEndpoints.updateAutomationStatus
.replaceAll('{automationId}', automationId),
path: ApiEndpoints.updateAutomationStatus.replaceAll('{automationId}', automationId),
body: createAutomationEnable.toMap(),
expectedResponseModel: (json) => json['success'],
);
@ -133,6 +129,7 @@ class SceneApi {
rethrow;
}
}
static Future<SceneDetailsModel> getSceneDetails(String sceneId) async {
try {
final response = await _httpService.get(
@ -146,20 +143,19 @@ class SceneApi {
}
}
static Future getIcon() async {
try {
final response = await _httpService.get(
path: ApiEndpoints.getIconScene,
showServerMessage: false,
expectedResponseModel: (json) {
log(json);
return json;
},
);
return response;
} catch (e) {
rethrow;
}
static Future<List<IconModel>> getIcon() async {
final response = await _httpService.get(
path: ApiEndpoints.getIconScene,
showServerMessage: false,
expectedResponseModel: (json) {
List<IconModel> iconsList = [];
json.forEach((element) {
iconsList.add(IconModel.fromJson(element));
});
return iconsList;
},
);
return response;
}
//update Scene
@ -167,8 +163,7 @@ class SceneApi {
try {
final response = await _httpService.put(
path: ApiEndpoints.updateScene.replaceAll('{sceneId}', sceneId),
body: createSceneModel
.toJson(sceneId.isNotEmpty == true ? sceneId : null),
body: createSceneModel.toJson(sceneId.isNotEmpty == true ? sceneId : null),
expectedResponseModel: (json) {
return json;
},
@ -180,14 +175,11 @@ class SceneApi {
}
//update automation
static updateAutomation(
CreateAutomationModel createAutomationModel, String automationId) async {
static updateAutomation(CreateAutomationModel createAutomationModel, String automationId) async {
try {
final response = await _httpService.put(
path: ApiEndpoints.updateAutomation
.replaceAll('{automationId}', automationId),
body: createAutomationModel
.toJson(automationId.isNotEmpty == true ? automationId : null),
path: ApiEndpoints.updateAutomation.replaceAll('{automationId}', automationId),
body: createAutomationModel.toJson(automationId.isNotEmpty == true ? automationId : null),
expectedResponseModel: (json) {
return json;
},
@ -200,8 +192,7 @@ class SceneApi {
//delete Scene
static Future<bool> deleteScene(
{required String unitUuid, required String sceneId}) async {
static Future<bool> deleteScene({required String unitUuid, required String sceneId}) async {
try {
final response = await _httpService.delete(
path: ApiEndpoints.deleteScene