diff --git a/assets/icons/routine/automation.svg b/assets/icons/routine/automation.svg new file mode 100644 index 00000000..a67aadaf --- /dev/null +++ b/assets/icons/routine/automation.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/pages/common/text_field/custom_text_field.dart b/lib/pages/common/text_field/custom_text_field.dart index 3ba71cd1..bb574e74 100644 --- a/lib/pages/common/text_field/custom_text_field.dart +++ b/lib/pages/common/text_field/custom_text_field.dart @@ -109,13 +109,25 @@ class CustomTextField extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ - Text( - title, - style: context.textTheme.bodyMedium!.copyWith( - fontSize: 13, - fontWeight: FontWeight.w600, - color: const Color(0xff000000), - ), + Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Visibility( + visible: isRequired == true, + child: Text('* ', + style: context.textTheme.bodyMedium! + .copyWith(color: Colors.red, fontSize: 13)), + ), + Text( + title, + style: context.textTheme.bodyMedium!.copyWith( + fontSize: 13, + fontWeight: FontWeight.w600, + color: const Color(0xff000000), + ), + ), + ], ), const SizedBox(height: 8), Material( diff --git a/lib/pages/routiens/helper/dialog_helper/device_dialog_helper.dart b/lib/pages/routiens/helper/dialog_helper/device_dialog_helper.dart index fcb8e740..33cfffee 100644 --- a/lib/pages/routiens/helper/dialog_helper/device_dialog_helper.dart +++ b/lib/pages/routiens/helper/dialog_helper/device_dialog_helper.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/routiens/bloc/routine_bloc/routine_bloc.dart'; -import 'package:syncrow_web/pages/routiens/helper/ac_helper.dart'; -import 'package:syncrow_web/pages/routiens/helper/one_gang_switch_helper.dart'; -import 'package:syncrow_web/pages/routiens/helper/three_gang_switch_helper.dart'; -import 'package:syncrow_web/pages/routiens/helper/two_gang_switch_helper.dart'; +import 'package:syncrow_web/pages/routiens/widgets/routine_dialogs/ac_dialog.dart'; +import 'package:syncrow_web/pages/routiens/widgets/routine_dialogs/one_gang_switch_dialog.dart'; +import 'package:syncrow_web/pages/routiens/widgets/routine_dialogs/three_gang_switch_dialog.dart'; +import 'package:syncrow_web/pages/routiens/widgets/routine_dialogs/two_gang_switch_dialog.dart'; import 'package:syncrow_web/pages/routiens/models/device_functions.dart'; class DeviceDialogHelper { diff --git a/lib/pages/routiens/helper/duration_format_helper.dart b/lib/pages/routiens/helper/duration_format_helper.dart new file mode 100644 index 00000000..1f22c9b2 --- /dev/null +++ b/lib/pages/routiens/helper/duration_format_helper.dart @@ -0,0 +1,15 @@ +class DurationFormatMixin { + static String formatDuration(int seconds) { + if (seconds >= 3600) { + final hours = (seconds / 3600).floor(); + final remainingMinutes = ((seconds % 3600) / 60).floor(); + final remainingSeconds = seconds % 60; + return '$hours h ${remainingMinutes}m ${remainingSeconds}s'; + } else if (seconds >= 60) { + final minutes = (seconds / 60).floor(); + final remainingSeconds = seconds % 60; + return '$minutes m ${remainingSeconds}s'; + } + return '${seconds}s'; + } +} diff --git a/lib/pages/routiens/models/ac/ac_function.dart b/lib/pages/routiens/models/ac/ac_function.dart index e5fa78ba..8feccda7 100644 --- a/lib/pages/routiens/models/ac/ac_function.dart +++ b/lib/pages/routiens/models/ac/ac_function.dart @@ -73,9 +73,9 @@ class TempSetFunction extends ACFunction { final int step; TempSetFunction({required super.deviceId, required super.deviceName}) - : min = 200, + : min = 160, max = 300, - step = 5, + step = 1, super( code: 'temp_set', operationName: 'Set Temperature', diff --git a/lib/pages/routiens/models/routine_model.dart b/lib/pages/routiens/models/routine_model.dart index 8035b044..e2075579 100644 --- a/lib/pages/routiens/models/routine_model.dart +++ b/lib/pages/routiens/models/routine_model.dart @@ -1,3 +1,5 @@ +import 'package:syncrow_web/utils/constants/assets.dart'; + class ScenesModel { final String id; final String name; @@ -13,12 +15,16 @@ class ScenesModel { this.icon, }); - factory ScenesModel.fromJson(Map json) => ScenesModel( + factory ScenesModel.fromJson(Map json, + {bool? isAutomation}) => + ScenesModel( id: json["id"], name: json["name"] ?? '', status: json["status"] ?? '', type: json["type"] ?? '', - icon: json["icon"] as String?, + icon: (isAutomation ?? false) + ? Assets.automation + : json["icon"] as String?, ); Map toJson() => { diff --git a/lib/pages/routiens/view/effective_period_view.dart b/lib/pages/routiens/view/effective_period_view.dart index 5bcd9ff0..d9d9bc2f 100644 --- a/lib/pages/routiens/view/effective_period_view.dart +++ b/lib/pages/routiens/view/effective_period_view.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/routiens/bloc/effective_period/effect_period_bloc.dart'; -import 'package:syncrow_web/pages/routiens/helper/effictive_period_helper.dart'; +import 'package:syncrow_web/pages/routiens/widgets/routine_dialogs/effictive_period_dialog.dart'; import 'package:syncrow_web/pages/routiens/widgets/period_option.dart'; import 'package:syncrow_web/pages/routiens/widgets/repeat_days.dart'; import 'package:syncrow_web/utils/color_manager.dart'; diff --git a/lib/pages/routiens/widgets/conditions_routines_devices_view.dart b/lib/pages/routiens/widgets/conditions_routines_devices_view.dart index 89b1f3f0..5cc31bf3 100644 --- a/lib/pages/routiens/widgets/conditions_routines_devices_view.dart +++ b/lib/pages/routiens/widgets/conditions_routines_devices_view.dart @@ -16,7 +16,7 @@ class ConditionsRoutinesDevicesView extends StatelessWidget { return BlocBuilder( builder: (context, state) { return const Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), + padding: EdgeInsets.symmetric(horizontal: 8.0), child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -65,13 +65,13 @@ class ConditionsRoutinesDevicesView extends StatelessWidget { ), ], ), - const SizedBox(height: 10), - const TitleRoutine( + SizedBox(height: 10), + TitleRoutine( title: 'Conditions', subtitle: '(THEN)', ), - const SizedBox(height: 10), - const Wrap( + SizedBox(height: 10), + Wrap( spacing: 10, runSpacing: 10, children: [ @@ -96,20 +96,20 @@ class ConditionsRoutinesDevicesView extends StatelessWidget { ), ], ), - const SizedBox(height: 10), - const TitleRoutine( + SizedBox(height: 10), + TitleRoutine( title: 'Routines', subtitle: '(THEN)', ), - const SizedBox(height: 10), - const ScenesAndAutomations(), - const SizedBox(height: 10), - const TitleRoutine( + SizedBox(height: 10), + ScenesAndAutomations(), + SizedBox(height: 10), + TitleRoutine( title: 'Devices', subtitle: '', ), - const SizedBox(height: 10), - const RoutineDevices(), + SizedBox(height: 10), + RoutineDevices(), ], ), ), diff --git a/lib/pages/routiens/widgets/dragable_card.dart b/lib/pages/routiens/widgets/dragable_card.dart index ae66ce02..db8ad1c9 100644 --- a/lib/pages/routiens/widgets/dragable_card.dart +++ b/lib/pages/routiens/widgets/dragable_card.dart @@ -106,7 +106,7 @@ class DraggableCard extends StatelessWidget { children: [ Expanded( child: Text( - '${function.operationName}: ${function.value}', + '${function.operationName}: ${_formatFunctionValue(function)}', style: context.textTheme.bodySmall?.copyWith( fontSize: 9, color: ColorsManager.textGray, @@ -144,6 +144,27 @@ class DraggableCard extends StatelessWidget { ); } + String _formatFunctionValue(DeviceFunctionData function) { + if (function.functionCode == 'temp_set' || + function.functionCode == 'temp_current') { + return '${(function.value / 10).toStringAsFixed(0)}°C'; + } else if (function.functionCode.contains('countdown')) { + final seconds = function.value.toInt(); + if (seconds >= 3600) { + final hours = (seconds / 3600).floor(); + final remainingMinutes = ((seconds % 3600) / 60).floor(); + final remainingSeconds = seconds % 60; + return '$hours h ${remainingMinutes}m ${remainingSeconds}s'; + } else if (seconds >= 60) { + final minutes = (seconds / 60).floor(); + final remainingSeconds = seconds % 60; + return '$minutes m ${remainingSeconds}s'; + } + return '${seconds}s'; + } + return function.value.toString(); + } + Widget _buildGreyContainer() { return Container( height: 123, diff --git a/lib/pages/routiens/widgets/period_option.dart b/lib/pages/routiens/widgets/period_option.dart index acb69231..8a89e2f9 100644 --- a/lib/pages/routiens/widgets/period_option.dart +++ b/lib/pages/routiens/widgets/period_option.dart @@ -3,7 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/routiens/bloc/effective_period/effect_period_bloc.dart'; import 'package:syncrow_web/pages/routiens/bloc/effective_period/effect_period_event.dart'; import 'package:syncrow_web/pages/routiens/bloc/effective_period/effect_period_state.dart'; -import 'package:syncrow_web/pages/routiens/helper/effictive_period_helper.dart'; +import 'package:syncrow_web/pages/routiens/widgets/routine_dialogs/effictive_period_dialog.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/constants/app_enum.dart'; @@ -21,9 +21,12 @@ class PeriodOptions extends StatelessWidget { builder: (context, state) { return Column( children: [ - _buildRadioOption(context, EnumEffectivePeriodOptions.allDay, '24 Hours'), - _buildRadioOption(context, EnumEffectivePeriodOptions.daytime, 'Sunrise to Sunset'), - _buildRadioOption(context, EnumEffectivePeriodOptions.night, 'Sunset to Sunrise'), + _buildRadioOption( + context, EnumEffectivePeriodOptions.allDay, '24 Hours'), + _buildRadioOption(context, EnumEffectivePeriodOptions.daytime, + 'Sunrise to Sunset'), + _buildRadioOption( + context, EnumEffectivePeriodOptions.night, 'Sunset to Sunrise'), ListTile( contentPadding: EdgeInsets.zero, onTap: () => showCustomTimePicker(context), @@ -34,7 +37,8 @@ class PeriodOptions extends StatelessWidget { fontWeight: FontWeight.w400, fontSize: 14), ), - subtitle: state.customStartTime != null && state.customEndTime != null + subtitle: state.customStartTime != null && + state.customEndTime != null ? Text( '${"${state.customStartTime}"} - ${"${state.customEndTime}"}', style: Theme.of(context).textTheme.bodyMedium!.copyWith( @@ -79,7 +83,9 @@ class PeriodOptions extends StatelessWidget { subtitle: Text( subtitle, style: Theme.of(context).textTheme.bodyMedium!.copyWith( - color: ColorsManager.textPrimaryColor, fontWeight: FontWeight.w400, fontSize: 10), + color: ColorsManager.textPrimaryColor, + fontWeight: FontWeight.w400, + fontSize: 10), ), trailing: Radio( value: value, diff --git a/lib/pages/routiens/helper/ac_helper.dart b/lib/pages/routiens/widgets/routine_dialogs/ac_dialog.dart similarity index 99% rename from lib/pages/routiens/helper/ac_helper.dart rename to lib/pages/routiens/widgets/routine_dialogs/ac_dialog.dart index 10606b69..e8b87a16 100644 --- a/lib/pages/routiens/helper/ac_helper.dart +++ b/lib/pages/routiens/widgets/routine_dialogs/ac_dialog.dart @@ -327,11 +327,11 @@ class ACHelper { String selectCode, ) { return Slider( - value: initialValue is int ? initialValue.toDouble() : 200.0, + value: initialValue is int ? initialValue.toDouble() : 160.0, min: 160, max: 300, divisions: 14, - label: '${((initialValue ?? 200) / 10).toInt()}°C', + label: '${((initialValue ?? 160) / 10).toInt()}°C', onChanged: (value) { context.read().add( AddFunction( diff --git a/lib/pages/routiens/helper/delay_helper.dart b/lib/pages/routiens/widgets/routine_dialogs/delay_dialog.dart similarity index 100% rename from lib/pages/routiens/helper/delay_helper.dart rename to lib/pages/routiens/widgets/routine_dialogs/delay_dialog.dart diff --git a/lib/pages/routiens/helper/effictive_period_helper.dart b/lib/pages/routiens/widgets/routine_dialogs/effictive_period_dialog.dart similarity index 100% rename from lib/pages/routiens/helper/effictive_period_helper.dart rename to lib/pages/routiens/widgets/routine_dialogs/effictive_period_dialog.dart diff --git a/lib/pages/routiens/helper/one_gang_switch_helper.dart b/lib/pages/routiens/widgets/routine_dialogs/one_gang_switch_dialog.dart similarity index 99% rename from lib/pages/routiens/helper/one_gang_switch_helper.dart rename to lib/pages/routiens/widgets/routine_dialogs/one_gang_switch_dialog.dart index c7d5d35a..ad25c657 100644 --- a/lib/pages/routiens/helper/one_gang_switch_helper.dart +++ b/lib/pages/routiens/widgets/routine_dialogs/one_gang_switch_dialog.dart @@ -4,6 +4,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart'; import 'package:syncrow_web/pages/routiens/bloc/functions_bloc/functions_bloc_bloc.dart'; import 'package:syncrow_web/pages/routiens/bloc/routine_bloc/routine_bloc.dart'; +import 'package:syncrow_web/pages/routiens/helper/duration_format_helper.dart'; import 'package:syncrow_web/pages/routiens/models/device_functions.dart'; import 'package:syncrow_web/pages/routiens/models/gang_switches/base_switch_function.dart'; import 'package:syncrow_web/pages/routiens/models/gang_switches/switch_operational_value.dart'; @@ -277,7 +278,7 @@ class OneGangSwitchHelper { borderRadius: BorderRadius.circular(10), ), child: Text( - '${initialValue ?? 0} sec', + DurationFormatMixin.formatDuration(initialValue?.toInt() ?? 0), style: context.textTheme.headlineMedium!.copyWith( color: ColorsManager.primaryColorWithOpacity, ), diff --git a/lib/pages/routiens/helper/setting_helper.dart b/lib/pages/routiens/widgets/routine_dialogs/setting_dialog.dart similarity index 100% rename from lib/pages/routiens/helper/setting_helper.dart rename to lib/pages/routiens/widgets/routine_dialogs/setting_dialog.dart diff --git a/lib/pages/routiens/helper/three_gang_switch_helper.dart b/lib/pages/routiens/widgets/routine_dialogs/three_gang_switch_dialog.dart similarity index 99% rename from lib/pages/routiens/helper/three_gang_switch_helper.dart rename to lib/pages/routiens/widgets/routine_dialogs/three_gang_switch_dialog.dart index 4a4c5e02..4f0d85a7 100644 --- a/lib/pages/routiens/helper/three_gang_switch_helper.dart +++ b/lib/pages/routiens/widgets/routine_dialogs/three_gang_switch_dialog.dart @@ -4,6 +4,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart'; import 'package:syncrow_web/pages/routiens/bloc/functions_bloc/functions_bloc_bloc.dart'; import 'package:syncrow_web/pages/routiens/bloc/routine_bloc/routine_bloc.dart'; +import 'package:syncrow_web/pages/routiens/helper/duration_format_helper.dart'; import 'package:syncrow_web/pages/routiens/models/device_functions.dart'; import 'package:syncrow_web/pages/routiens/models/gang_switches/base_switch_function.dart'; import 'package:syncrow_web/pages/routiens/models/gang_switches/switch_operational_value.dart'; @@ -279,7 +280,7 @@ class ThreeGangSwitchHelper { borderRadius: BorderRadius.circular(10), ), child: Text( - '${initialValue ?? 0} sec', + DurationFormatMixin.formatDuration(initialValue?.toInt() ?? 0), style: context.textTheme.headlineMedium!.copyWith( color: ColorsManager.primaryColorWithOpacity, ), diff --git a/lib/pages/routiens/helper/two_gang_switch_helper.dart b/lib/pages/routiens/widgets/routine_dialogs/two_gang_switch_dialog.dart similarity index 99% rename from lib/pages/routiens/helper/two_gang_switch_helper.dart rename to lib/pages/routiens/widgets/routine_dialogs/two_gang_switch_dialog.dart index 3805882a..8282bc7b 100644 --- a/lib/pages/routiens/helper/two_gang_switch_helper.dart +++ b/lib/pages/routiens/widgets/routine_dialogs/two_gang_switch_dialog.dart @@ -4,6 +4,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart'; import 'package:syncrow_web/pages/routiens/bloc/functions_bloc/functions_bloc_bloc.dart'; import 'package:syncrow_web/pages/routiens/bloc/routine_bloc/routine_bloc.dart'; +import 'package:syncrow_web/pages/routiens/helper/duration_format_helper.dart'; import 'package:syncrow_web/pages/routiens/models/device_functions.dart'; import 'package:syncrow_web/pages/routiens/models/gang_switches/base_switch_function.dart'; import 'package:syncrow_web/pages/routiens/models/gang_switches/switch_operational_value.dart'; @@ -278,7 +279,7 @@ class TwoGangSwitchHelper { borderRadius: BorderRadius.circular(10), ), child: Text( - '${initialValue ?? 0} sec', + DurationFormatMixin.formatDuration(initialValue?.toInt() ?? 0), style: context.textTheme.headlineMedium!.copyWith( color: ColorsManager.primaryColorWithOpacity, ), diff --git a/lib/pages/routiens/widgets/routine_search_and_buttons.dart b/lib/pages/routiens/widgets/routine_search_and_buttons.dart index 41a47c17..01352bf8 100644 --- a/lib/pages/routiens/widgets/routine_search_and_buttons.dart +++ b/lib/pages/routiens/widgets/routine_search_and_buttons.dart @@ -4,7 +4,7 @@ import 'package:syncrow_web/pages/common/buttons/default_button.dart'; import 'package:syncrow_web/pages/common/text_field/custom_text_field.dart'; import 'package:syncrow_web/pages/routiens/bloc/routine_bloc/routine_bloc.dart'; import 'package:syncrow_web/pages/routiens/helper/save_routine_helper.dart'; -import 'package:syncrow_web/pages/routiens/helper/setting_helper.dart'; +import 'package:syncrow_web/pages/routiens/widgets/routine_dialogs/setting_dialog.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/style.dart'; @@ -31,7 +31,9 @@ class RoutineSearchAndButtons extends StatelessWidget { children: [ ConstrainedBox( constraints: BoxConstraints( - maxWidth: constraints.maxWidth > 700 ? 450 : constraints.maxWidth - 32), + maxWidth: constraints.maxWidth > 700 + ? 450 + : constraints.maxWidth - 32), child: StatefulTextField( title: 'Routine Name', height: 40, @@ -55,11 +57,14 @@ class RoutineSearchAndButtons extends StatelessWidget { child: Center( child: DefaultButton( onPressed: () async { - final result = await SettingHelper.showSettingDialog( + final result = + await SettingHelper.showSettingDialog( context: context, ); if (result != null) { - context.read().add(AddSelectedIcon(result)); + context + .read() + .add(AddSelectedIcon(result)); } }, borderRadius: 15, diff --git a/lib/pages/routiens/widgets/scenes_and_automations.dart b/lib/pages/routiens/widgets/scenes_and_automations.dart index 633f9a82..7a26979c 100644 --- a/lib/pages/routiens/widgets/scenes_and_automations.dart +++ b/lib/pages/routiens/widgets/scenes_and_automations.dart @@ -34,7 +34,9 @@ class _ScenesAndAutomationsState extends State { children: scenes.asMap().entries.map((entry) { final scene = entry.value; if (state.searchText != null && state.searchText!.isNotEmpty) { - return scene.name.toLowerCase().contains(state.searchText!.toLowerCase()) + return scene.name + .toLowerCase() + .contains(state.searchText!.toLowerCase()) ? DraggableCard( imagePath: Assets.logo, title: scene.name, @@ -49,7 +51,7 @@ class _ScenesAndAutomationsState extends State { : Container(); } else { return DraggableCard( - imagePath: Assets.logo, + imagePath: scene.icon ?? Assets.loginLogo, title: scene.name, deviceData: { 'deviceId': scene.id, diff --git a/lib/pages/routiens/widgets/then_container.dart b/lib/pages/routiens/widgets/then_container.dart index d6c9500f..2bc65b0e 100644 --- a/lib/pages/routiens/widgets/then_container.dart +++ b/lib/pages/routiens/widgets/then_container.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/routiens/bloc/routine_bloc/routine_bloc.dart'; -import 'package:syncrow_web/pages/routiens/helper/delay_helper.dart'; +import 'package:syncrow_web/pages/routiens/widgets/routine_dialogs/delay_dialog.dart'; import 'package:syncrow_web/pages/routiens/helper/dialog_helper/device_dialog_helper.dart'; import 'package:syncrow_web/pages/routiens/widgets/dragable_card.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; diff --git a/lib/services/routines_api.dart b/lib/services/routines_api.dart index abf5099e..0ce106b2 100644 --- a/lib/services/routines_api.dart +++ b/lib/services/routines_api.dart @@ -93,7 +93,7 @@ class SceneApi { expectedResponseModel: (json) { List scenes = []; for (var scene in json) { - scenes.add(ScenesModel.fromJson(scene)); + scenes.add(ScenesModel.fromJson(scene, isAutomation: true)); } return scenes; }, diff --git a/lib/utils/constants/assets.dart b/lib/utils/constants/assets.dart index 6c542017..cffaf472 100644 --- a/lib/utils/constants/assets.dart +++ b/lib/utils/constants/assets.dart @@ -13,10 +13,12 @@ class Assets { static const String rightLine = "assets/images/right_line.png"; static const String google = "assets/images/google.svg"; static const String facebook = "assets/images/facebook.svg"; - static const String invisiblePassword = "assets/images/Password_invisible.svg"; + static const String invisiblePassword = + "assets/images/Password_invisible.svg"; static const String visiblePassword = "assets/images/password_visible.svg"; static const String accessIcon = "assets/images/access_icon.svg"; - static const String spaseManagementIcon = "assets/images/spase_management_icon.svg"; + static const String spaseManagementIcon = + "assets/images/spase_management_icon.svg"; static const String devicesIcon = "assets/images/devices_icon.svg"; static const String moveinIcon = "assets/images/movein_icon.svg"; static const String constructionIcon = "assets/images/construction_icon.svg"; @@ -29,13 +31,15 @@ class Assets { static const String emptyTable = "assets/images/empty_table.svg"; // General assets - static const String motionlessDetection = "assets/icons/motionless_detection.svg"; + static const String motionlessDetection = + "assets/icons/motionless_detection.svg"; static const String acHeating = "assets/icons/ac_heating.svg"; static const String acPowerOff = "assets/icons/ac_power_off.svg"; static const String acFanMiddle = "assets/icons/ac_fan_middle.svg"; static const String switchAlarmSound = "assets/icons/switch_alarm_sound.svg"; static const String resetOff = "assets/icons/reset_off.svg"; - static const String sensitivityOperationIcon = "assets/icons/sesitivity_operation_icon.svg"; + static const String sensitivityOperationIcon = + "assets/icons/sesitivity_operation_icon.svg"; static const String motionDetection = "assets/icons/motion_detection.svg"; static const String freezing = "assets/icons/freezing.svg"; static const String indicator = "assets/icons/indicator.svg"; @@ -56,35 +60,56 @@ class Assets { static const String celsiusDegrees = "assets/icons/celsius_degrees.svg"; static const String masterState = "assets/icons/master_state.svg"; static const String acPower = "assets/icons/ac_power.svg"; - static const String farDetectionFunction = "assets/icons/far_detection_function.svg"; + static const String farDetectionFunction = + "assets/icons/far_detection_function.svg"; static const String nobodyTime = "assets/icons/nobody_time.svg"; // Automation functions - static const String tempPasswordUnlock = "assets/icons/automation_functions/temp_password_unlock.svg"; - static const String doorlockNormalOpen = "assets/icons/automation_functions/doorlock_normal_open.svg"; - static const String doorbell = "assets/icons/automation_functions/doorbell.svg"; - static const String remoteUnlockViaApp = "assets/icons/automation_functions/remote_unlock_via_app.svg"; - static const String doubleLock = "assets/icons/automation_functions/double_lock.svg"; - static const String selfTestResult = "assets/icons/automation_functions/self_test_result.svg"; - static const String lockAlarm = "assets/icons/automation_functions/lock_alarm.svg"; - static const String presenceState = "assets/icons/automation_functions/presence_state.svg"; - static const String currentTemp = "assets/icons/automation_functions/current_temp.svg"; - static const String presence = "assets/icons/automation_functions/presence.svg"; - static const String residualElectricity = "assets/icons/automation_functions/residual_electricity.svg"; - static const String hijackAlarm = "assets/icons/automation_functions/hijack_alarm.svg"; - static const String passwordUnlock = "assets/icons/automation_functions/password_unlock.svg"; - static const String remoteUnlockRequest = "assets/icons/automation_functions/remote_unlock_req.svg"; - static const String cardUnlock = "assets/icons/automation_functions/card_unlock.svg"; + static const String tempPasswordUnlock = + "assets/icons/automation_functions/temp_password_unlock.svg"; + static const String doorlockNormalOpen = + "assets/icons/automation_functions/doorlock_normal_open.svg"; + static const String doorbell = + "assets/icons/automation_functions/doorbell.svg"; + static const String remoteUnlockViaApp = + "assets/icons/automation_functions/remote_unlock_via_app.svg"; + static const String doubleLock = + "assets/icons/automation_functions/double_lock.svg"; + static const String selfTestResult = + "assets/icons/automation_functions/self_test_result.svg"; + static const String lockAlarm = + "assets/icons/automation_functions/lock_alarm.svg"; + static const String presenceState = + "assets/icons/automation_functions/presence_state.svg"; + static const String currentTemp = + "assets/icons/automation_functions/current_temp.svg"; + static const String presence = + "assets/icons/automation_functions/presence.svg"; + static const String residualElectricity = + "assets/icons/automation_functions/residual_electricity.svg"; + static const String hijackAlarm = + "assets/icons/automation_functions/hijack_alarm.svg"; + static const String passwordUnlock = + "assets/icons/automation_functions/password_unlock.svg"; + static const String remoteUnlockRequest = + "assets/icons/automation_functions/remote_unlock_req.svg"; + static const String cardUnlock = + "assets/icons/automation_functions/card_unlock.svg"; static const String motion = "assets/icons/automation_functions/motion.svg"; - static const String fingerprintUnlock = "assets/icons/automation_functions/fingerprint_unlock.svg"; + static const String fingerprintUnlock = + "assets/icons/automation_functions/fingerprint_unlock.svg"; // Presence Sensor Assets static const String sensorMotionIcon = "assets/icons/sensor_motion_ic.svg"; - static const String sensorPresenceIcon = "assets/icons/sensor_presence_ic.svg"; + static const String sensorPresenceIcon = + "assets/icons/sensor_presence_ic.svg"; static const String sensorVacantIcon = "assets/icons/sensor_vacant_ic.svg"; - static const String illuminanceRecordIcon = "assets/icons/illuminance_record_ic.svg"; - static const String presenceRecordIcon = "assets/icons/presence_record_ic.svg"; - static const String helpDescriptionIcon = "assets/icons/help_description_ic.svg"; + static const String illuminanceRecordIcon = + "assets/icons/illuminance_record_ic.svg"; + static const String presenceRecordIcon = + "assets/icons/presence_record_ic.svg"; + static const String helpDescriptionIcon = + "assets/icons/help_description_ic.svg"; static const String lightPulp = "assets/icons/light_pulb.svg"; static const String acDevice = "assets/icons/ac_device.svg"; @@ -158,7 +183,8 @@ class Assets { //assets/icons/water_leak_normal.svg static const String waterLeakNormal = 'assets/icons/water_leak_normal.svg'; //assets/icons/water_leak_detected.svg - static const String waterLeakDetected = 'assets/icons/water_leak_detected.svg'; + static const String waterLeakDetected = + 'assets/icons/water_leak_detected.svg'; //assets/icons/automation_records.svg static const String automationRecords = 'assets/icons/automation_records.svg'; @@ -212,57 +238,100 @@ class Assets { static const String delay = 'assets/icons/routine/delay.svg'; // Assets for functions_icons - static const String assetsSensitivityFunction = "assets/icons/functions_icons/sensitivity.svg"; - static const String assetsSensitivityOperationIcon = "assets/icons/functions_icons/sesitivity_operation_icon.svg"; - static const String assetsAcPower = "assets/icons/functions_icons/ac_power.svg"; - static const String assetsAcPowerOFF = "assets/icons/functions_icons/ac_power_off.svg"; - static const String assetsChildLock = "assets/icons/functions_icons/child_lock.svg"; - static const String assetsFreezing = "assets/icons/functions_icons/freezing.svg"; - static const String assetsFanSpeed = "assets/icons/functions_icons/fan_speed.svg"; - static const String assetsAcCooling = "assets/icons/functions_icons/ac_cooling.svg"; - static const String assetsAcHeating = "assets/icons/functions_icons/ac_heating.svg"; - static const String assetsCelsiusDegrees = "assets/icons/functions_icons/celsius_degrees.svg"; - static const String assetsTempreture = "assets/icons/functions_icons/tempreture.svg"; - static const String assetsAcFanLow = "assets/icons/functions_icons/ac_fan_low.svg"; - static const String assetsAcFanMiddle = "assets/icons/functions_icons/ac_fan_middle.svg"; - static const String assetsAcFanHigh = "assets/icons/functions_icons/ac_fan_high.svg"; - static const String assetsAcFanAuto = "assets/icons/functions_icons/ac_fan_auto.svg"; - static const String assetsSceneChildLock = "assets/icons/functions_icons/scene_child_lock.svg"; - static const String assetsSceneChildUnlock = "assets/icons/functions_icons/scene_child_unlock.svg"; - static const String assetsSceneRefresh = "assets/icons/functions_icons/scene_refresh.svg"; - static const String assetsLightCountdown = "assets/icons/functions_icons/light_countdown.svg"; - static const String assetsFarDetection = "assets/icons/functions_icons/far_detection.svg"; - static const String assetsFarDetectionFunction = "assets/icons/functions_icons/far_detection_function.svg"; - static const String assetsIndicator = "assets/icons/functions_icons/indicator.svg"; - static const String assetsMotionDetection = "assets/icons/functions_icons/motion_detection.svg"; - static const String assetsMotionlessDetection = "assets/icons/functions_icons/motionless_detection.svg"; - static const String assetsNobodyTime = "assets/icons/functions_icons/nobody_time.svg"; - static const String assetsFactoryReset = "assets/icons/functions_icons/factory_reset.svg"; - static const String assetsMasterState = "assets/icons/functions_icons/master_state.svg"; - static const String assetsSwitchAlarmSound = "assets/icons/functions_icons/switch_alarm_sound.svg"; - static const String assetsResetOff = "assets/icons/functions_icons/reset_off.svg"; + static const String assetsSensitivityFunction = + "assets/icons/functions_icons/sensitivity.svg"; + static const String assetsSensitivityOperationIcon = + "assets/icons/functions_icons/sesitivity_operation_icon.svg"; + static const String assetsAcPower = + "assets/icons/functions_icons/ac_power.svg"; + static const String assetsAcPowerOFF = + "assets/icons/functions_icons/ac_power_off.svg"; + static const String assetsChildLock = + "assets/icons/functions_icons/child_lock.svg"; + static const String assetsFreezing = + "assets/icons/functions_icons/freezing.svg"; + static const String assetsFanSpeed = + "assets/icons/functions_icons/fan_speed.svg"; + static const String assetsAcCooling = + "assets/icons/functions_icons/ac_cooling.svg"; + static const String assetsAcHeating = + "assets/icons/functions_icons/ac_heating.svg"; + static const String assetsCelsiusDegrees = + "assets/icons/functions_icons/celsius_degrees.svg"; + static const String assetsTempreture = + "assets/icons/functions_icons/tempreture.svg"; + static const String assetsAcFanLow = + "assets/icons/functions_icons/ac_fan_low.svg"; + static const String assetsAcFanMiddle = + "assets/icons/functions_icons/ac_fan_middle.svg"; + static const String assetsAcFanHigh = + "assets/icons/functions_icons/ac_fan_high.svg"; + static const String assetsAcFanAuto = + "assets/icons/functions_icons/ac_fan_auto.svg"; + static const String assetsSceneChildLock = + "assets/icons/functions_icons/scene_child_lock.svg"; + static const String assetsSceneChildUnlock = + "assets/icons/functions_icons/scene_child_unlock.svg"; + static const String assetsSceneRefresh = + "assets/icons/functions_icons/scene_refresh.svg"; + static const String assetsLightCountdown = + "assets/icons/functions_icons/light_countdown.svg"; + static const String assetsFarDetection = + "assets/icons/functions_icons/far_detection.svg"; + static const String assetsFarDetectionFunction = + "assets/icons/functions_icons/far_detection_function.svg"; + static const String assetsIndicator = + "assets/icons/functions_icons/indicator.svg"; + static const String assetsMotionDetection = + "assets/icons/functions_icons/motion_detection.svg"; + static const String assetsMotionlessDetection = + "assets/icons/functions_icons/motionless_detection.svg"; + static const String assetsNobodyTime = + "assets/icons/functions_icons/nobody_time.svg"; + static const String assetsFactoryReset = + "assets/icons/functions_icons/factory_reset.svg"; + static const String assetsMasterState = + "assets/icons/functions_icons/master_state.svg"; + static const String assetsSwitchAlarmSound = + "assets/icons/functions_icons/switch_alarm_sound.svg"; + static const String assetsResetOff = + "assets/icons/functions_icons/reset_off.svg"; // Assets for automation_functions - static const String assetsCardUnlock = "assets/icons/functions_icons/automation_functions/card_unlock.svg"; - static const String assetsDoorbell = "assets/icons/functions_icons/automation_functions/doorbell.svg"; + static const String assetsCardUnlock = + "assets/icons/functions_icons/automation_functions/card_unlock.svg"; + static const String assetsDoorbell = + "assets/icons/functions_icons/automation_functions/doorbell.svg"; static const String assetsDoorlockNormalOpen = "assets/icons/functions_icons/automation_functions/doorlock_normal_open.svg"; - static const String assetsDoubleLock = "assets/icons/functions_icons/automation_functions/double_lock.svg"; + static const String assetsDoubleLock = + "assets/icons/functions_icons/automation_functions/double_lock.svg"; static const String assetsFingerprintUnlock = "assets/icons/functions_icons/automation_functions/fingerprint_unlock.svg"; - static const String assetsHijackAlarm = "assets/icons/functions_icons/automation_functions/hijack_alarm.svg"; - static const String assetsLockAlarm = "assets/icons/functions_icons/automation_functions/lock_alarm.svg"; - static const String assetsPasswordUnlock = "assets/icons/functions_icons/automation_functions/password_unlock.svg"; - static const String assetsRemoteUnlockReq = "assets/icons/functions_icons/automation_functions/remote_unlock_req.svg"; + static const String assetsHijackAlarm = + "assets/icons/functions_icons/automation_functions/hijack_alarm.svg"; + static const String assetsLockAlarm = + "assets/icons/functions_icons/automation_functions/lock_alarm.svg"; + static const String assetsPasswordUnlock = + "assets/icons/functions_icons/automation_functions/password_unlock.svg"; + static const String assetsRemoteUnlockReq = + "assets/icons/functions_icons/automation_functions/remote_unlock_req.svg"; static const String assetsRemoteUnlockViaApp = "assets/icons/functions_icons/automation_functions/remote_unlock_via_app.svg"; static const String assetsResidualElectricity = "assets/icons/functions_icons/automation_functions/residual_electricity.svg"; static const String assetsTempPasswordUnlock = "assets/icons/functions_icons/automation_functions/temp_password_unlock.svg"; - static const String assetsSelfTestResult = "assets/icons/functions_icons/automation_functions/self_test_result.svg"; - static const String assetsPresence = "assets/icons/functions_icons/automation_functions/presence.svg"; - static const String assetsMotion = "assets/icons/functions_icons/automation_functions/motion.svg"; - static const String assetsCurrentTemp = "assets/icons/functions_icons/automation_functions/current_temp.svg"; - static const String assetsPresenceState = "assets/icons/functions_icons/automation_functions/presence_state.svg"; + static const String assetsSelfTestResult = + "assets/icons/functions_icons/automation_functions/self_test_result.svg"; + static const String assetsPresence = + "assets/icons/functions_icons/automation_functions/presence.svg"; + static const String assetsMotion = + "assets/icons/functions_icons/automation_functions/motion.svg"; + static const String assetsCurrentTemp = + "assets/icons/functions_icons/automation_functions/current_temp.svg"; + static const String assetsPresenceState = + "assets/icons/functions_icons/automation_functions/presence_state.svg"; + //assets/icons/routine/automation.svg + static const String automation = 'assets/icons/routine/automation.svg'; } diff --git a/pubspec.lock b/pubspec.lock index 3e12d6c5..cfd8b310 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -57,6 +57,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" + crypto: + dependency: transitive + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" cupertino_icons: dependency: "direct main" description: @@ -137,6 +145,14 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" fl_chart: dependency: "direct main" description: @@ -533,6 +549,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" stack_trace: dependency: transitive description: @@ -589,6 +613,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + uuid: + dependency: "direct main" + description: + name: uuid + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + url: "https://pub.dev" + source: hosted + version: "4.5.1" vector_graphics: dependency: transitive description: