diff --git a/assets/icons/automation_ic.svg b/assets/icons/automation_ic.svg new file mode 100644 index 0000000..a655eb5 --- /dev/null +++ b/assets/icons/automation_ic.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/features/app_layout/bloc/home_cubit.dart b/lib/features/app_layout/bloc/home_cubit.dart index 3e85cdc..29773da 100644 --- a/lib/features/app_layout/bloc/home_cubit.dart +++ b/lib/features/app_layout/bloc/home_cubit.dart @@ -370,6 +370,9 @@ class HomeCubit extends Cubit { .add(const SmartSceneClearEvent()); BlocProvider.of(NavigationService.navigatorKey.currentState!.context) .add(ResetEffectivePeriod()); + NavigationService.navigatorKey.currentContext! + .read() + .add(const ClearTabToRunSetting()); }, ), IconButton( diff --git a/lib/features/devices/bloc/acs_bloc/acs_bloc.dart b/lib/features/devices/bloc/acs_bloc/acs_bloc.dart index 3a6564d..c8a8350 100644 --- a/lib/features/devices/bloc/acs_bloc/acs_bloc.dart +++ b/lib/features/devices/bloc/acs_bloc/acs_bloc.dart @@ -61,11 +61,10 @@ class ACsBloc extends Bloc { for (var status in response['status']) { statusModelList.add(StatusModel.fromJson(status)); } - deviceStatus = - AcStatusModel.fromJson(response['productUuid'], statusModelList); + deviceStatus = AcStatusModel.fromJson(response['productUuid'], statusModelList); emit(GetAcStatusState(acStatusModel: deviceStatus)); Future.delayed(const Duration(milliseconds: 500)); - // _listenToChanges(); + _listenToChanges(); } } catch (e) { emit(AcsFailedState(errorMessage: e.toString())); @@ -75,22 +74,18 @@ class ACsBloc extends Bloc { _listenToChanges() { try { - DatabaseReference ref = - FirebaseDatabase.instance.ref('device-status/$acId'); + DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$acId'); Stream stream = ref.onValue; stream.listen((DatabaseEvent event) { - Map usersMap = - event.snapshot.value as Map; + Map usersMap = event.snapshot.value as Map; List statusList = []; usersMap['status'].forEach((element) { - statusList - .add(StatusModel(code: element['code'], value: element['value'])); + statusList.add(StatusModel(code: element['code'], value: element['value'])); }); - deviceStatus = - AcStatusModel.fromJson(usersMap['productUuid'], statusList); + deviceStatus = AcStatusModel.fromJson(usersMap['productUuid'], statusList); add(AcUpdated()); }); } catch (_) {} @@ -107,14 +102,12 @@ class ACsBloc extends Bloc { HomeCubit.getInstance().selectedSpace?.id ?? '', 'AC'); for (int i = 0; i < devicesList.length; i++) { - var response = - await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? ''); + var response = await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? ''); List statusModelList = []; for (var status in response['status']) { statusModelList.add(StatusModel.fromJson(status)); } - deviceStatusList.add( - AcStatusModel.fromJson(response['productUuid'], statusModelList)); + deviceStatusList.add(AcStatusModel.fromJson(response['productUuid'], statusModelList)); } _setAllAcsTempsAndSwitches(); } @@ -136,8 +129,7 @@ class ACsBloc extends Bloc { emit(AcModifyingState(acStatusModel: deviceStatus)); } - await _runDeBouncerForOneDevice( - deviceId: event.deviceId, code: 'switch', value: acSwitchValue); + await _runDeBouncerForOneDevice(deviceId: event.deviceId, code: 'switch', value: acSwitchValue); } void _changeAllAcSwitch(ChangeAllSwitch event, Emitter emit) async { @@ -198,8 +190,7 @@ class ACsBloc extends Bloc { deviceStatus.childLock = lockValue; emit(AcModifyingState(acStatusModel: deviceStatus)); - await _runDeBouncerForOneDevice( - deviceId: acId, code: 'child_lock', value: lockValue); + await _runDeBouncerForOneDevice(deviceId: acId, code: 'child_lock', value: lockValue); } void _increaseCoolTo(IncreaseCoolToTemp event, Emitter emit) async { @@ -227,8 +218,7 @@ class ACsBloc extends Bloc { emit(AcModifyingState(acStatusModel: deviceStatus)); } - await _runDeBouncerForOneDevice( - deviceId: event.deviceId, code: 'temp_set', value: value); + await _runDeBouncerForOneDevice(deviceId: event.deviceId, code: 'temp_set', value: value); } void _decreaseCoolTo(DecreaseCoolToTemp event, Emitter emit) async { @@ -256,8 +246,7 @@ class ACsBloc extends Bloc { emit(AcModifyingState(acStatusModel: deviceStatus)); } - await _runDeBouncerForOneDevice( - deviceId: event.deviceId, code: 'temp_set', value: value); + await _runDeBouncerForOneDevice(deviceId: event.deviceId, code: 'temp_set', value: value); } void _changeAcMode(ChangeAcMode event, Emitter emit) async { @@ -279,9 +268,7 @@ class ACsBloc extends Bloc { } await _runDeBouncerForOneDevice( - deviceId: event.deviceId, - code: 'mode', - value: getACModeString(tempMode)); + deviceId: event.deviceId, code: 'mode', value: getACModeString(tempMode)); } void _changeFanSpeed(ChangeFanSpeed event, Emitter emit) async { @@ -294,23 +281,19 @@ class ACsBloc extends Bloc { for (AcStatusModel ac in deviceStatusList) { if (ac.uuid == event.productId) { ac.fanSpeedsString = getNextFanSpeedKey(fanSpeed); - ac.acFanSpeed = - AcStatusModel.getFanSpeed(getNextFanSpeedKey(fanSpeed)); + ac.acFanSpeed = AcStatusModel.getFanSpeed(getNextFanSpeedKey(fanSpeed)); } } _emitAcsStatus(emit); } else { emit(AcChangeLoading(acStatusModel: deviceStatus)); deviceStatus.fanSpeedsString = getNextFanSpeedKey(fanSpeed); - deviceStatus.acFanSpeed = - AcStatusModel.getFanSpeed(getNextFanSpeedKey(fanSpeed)); + deviceStatus.acFanSpeed = AcStatusModel.getFanSpeed(getNextFanSpeedKey(fanSpeed)); emit(AcModifyingState(acStatusModel: deviceStatus)); } await _runDeBouncerForOneDevice( - deviceId: event.deviceId, - code: 'level', - value: getNextFanSpeedKey(fanSpeed)); + deviceId: event.deviceId, code: 'level', value: getNextFanSpeedKey(fanSpeed)); } String getACModeString(TempModes value) { @@ -355,8 +338,7 @@ class ACsBloc extends Bloc { for (int i = 0; i < deviceStatusList.length; i++) { try { await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: devicesList[i].uuid, code: code, value: value), + DeviceControlModel(deviceId: devicesList[i].uuid, code: code, value: value), devicesList[i].uuid ?? ''); } catch (_) { await Future.delayed(const Duration(milliseconds: 500)); @@ -378,10 +360,7 @@ class ACsBloc extends Bloc { _timer = Timer(const Duration(seconds: 1), () async { try { final response = await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: allAcsPage ? deviceId : acId, - code: code, - value: value), + DeviceControlModel(deviceId: allAcsPage ? deviceId : acId, code: code, value: value), allAcsPage ? deviceId : acId); if (!response['success']) { @@ -398,8 +377,7 @@ class ACsBloc extends Bloc { if (value >= 20 && value <= 30) { return true; } else { - emit(const AcsFailedState( - errorMessage: 'The temperature must be between 20 and 30')); + emit(const AcsFailedState(errorMessage: 'The temperature must be between 20 and 30')); emit(GetAllAcsStatusState( allAcsStatues: deviceStatusList, allAcs: devicesList, diff --git a/lib/features/devices/bloc/ceiling_bloc/ceiling_sensor_bloc.dart b/lib/features/devices/bloc/ceiling_bloc/ceiling_sensor_bloc.dart index ce50e64..536df9b 100644 --- a/lib/features/devices/bloc/ceiling_bloc/ceiling_sensor_bloc.dart +++ b/lib/features/devices/bloc/ceiling_bloc/ceiling_sensor_bloc.dart @@ -19,8 +19,7 @@ class CeilingSensorBloc extends Bloc { on(_onCeilingSensorUpdated); } - void _fetchCeilingSensorStatus( - InitialEvent event, Emitter emit) async { + void _fetchCeilingSensorStatus(InitialEvent event, Emitter emit) async { emit(LoadingInitialState()); try { var response = await DevicesAPI.getDeviceStatus(deviceId); @@ -30,7 +29,7 @@ class CeilingSensorBloc extends Bloc { } deviceStatus = CeilingSensorModel.fromJson(statusModelList); emit(UpdateState(ceilingSensorModel: deviceStatus)); - // _listenToChanges(); + _listenToChanges(); } catch (e) { emit(FailedState(error: e.toString())); return; @@ -39,18 +38,15 @@ class CeilingSensorBloc extends Bloc { _listenToChanges() { try { - DatabaseReference ref = - FirebaseDatabase.instance.ref('device-status/$deviceId'); + DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$deviceId'); Stream stream = ref.onValue; stream.listen((DatabaseEvent event) { - Map usersMap = - event.snapshot.value as Map; + Map usersMap = event.snapshot.value as Map; List statusList = []; usersMap['status'].forEach((element) { - statusList - .add(StatusModel(code: element['code'], value: element['value'])); + statusList.add(StatusModel(code: element['code'], value: element['value'])); }); deviceStatus = CeilingSensorModel.fromJson(statusList); @@ -59,19 +55,15 @@ class CeilingSensorBloc extends Bloc { } catch (_) {} } - _onCeilingSensorUpdated( - CeilingSensorUpdated event, Emitter emit) { + _onCeilingSensorUpdated(CeilingSensorUpdated event, Emitter emit) { emit(UpdateState(ceilingSensorModel: deviceStatus)); } - void _changeValue( - ChangeValueEvent event, Emitter emit) async { + void _changeValue(ChangeValueEvent event, Emitter emit) async { emit(LoadingNewSate(ceilingSensorModel: deviceStatus)); try { final response = await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: deviceId, code: event.code, value: event.value), - deviceId); + DeviceControlModel(deviceId: deviceId, code: event.code, value: event.value), deviceId); if (response['success'] ?? false) { deviceStatus.sensitivity = event.value; diff --git a/lib/features/devices/bloc/door_sensor_bloc/door_sensor_bloc.dart b/lib/features/devices/bloc/door_sensor_bloc/door_sensor_bloc.dart index 113b9e8..d4e31b5 100644 --- a/lib/features/devices/bloc/door_sensor_bloc/door_sensor_bloc.dart +++ b/lib/features/devices/bloc/door_sensor_bloc/door_sensor_bloc.dart @@ -25,11 +25,9 @@ class DoorSensorBloc extends Bloc { bool lowBattery = false; bool closingReminder = false; bool doorAlarm = false; - DoorSensorModel deviceStatus = - DoorSensorModel(doorContactState: false, batteryPercentage: 0); + DoorSensorModel deviceStatus = DoorSensorModel(doorContactState: false, batteryPercentage: 0); - void _fetchStatus( - DoorSensorInitial event, Emitter emit) async { + void _fetchStatus(DoorSensorInitial event, Emitter emit) async { emit(DoorSensorLoadingState()); try { var response = await DevicesAPI.getDeviceStatus(DSId); @@ -42,7 +40,7 @@ class DoorSensorBloc extends Bloc { ); emit(UpdateState(doorSensor: deviceStatus)); Future.delayed(const Duration(milliseconds: 500)); - // _listenToChanges(); + _listenToChanges(); } catch (e) { emit(DoorSensorFailedState(errorMessage: e.toString())); return; @@ -50,8 +48,7 @@ class DoorSensorBloc extends Bloc { } // Toggle functions for each switch - void _toggleLowBattery( - ToggleLowBatteryEvent event, Emitter emit) async { + void _toggleLowBattery(ToggleLowBatteryEvent event, Emitter emit) async { emit(LoadingNewSate(doorSensor: deviceStatus)); try { lowBattery = event.isLowBatteryEnabled; @@ -92,8 +89,7 @@ class DoorSensorBloc extends Bloc { } } - void _toggleDoorAlarm( - ToggleDoorAlarmEvent event, Emitter emit) async { + void _toggleDoorAlarm(ToggleDoorAlarmEvent event, Emitter emit) async { emit(LoadingNewSate(doorSensor: deviceStatus)); try { doorAlarm = event.isDoorAlarmEnabled; @@ -112,11 +108,9 @@ class DoorSensorBloc extends Bloc { } } - DeviceReport recordGroups = - DeviceReport(startTime: '0', endTime: '0', data: []); + DeviceReport recordGroups = DeviceReport(startTime: '0', endTime: '0', data: []); - Future fetchLogsForLastMonth( - ReportLogsInitial event, Emitter emit) async { + Future fetchLogsForLastMonth(ReportLogsInitial event, Emitter emit) async { DateTime now = DateTime.now(); DateTime lastMonth = DateTime(now.year, now.month - 1, now.day); @@ -126,9 +120,8 @@ class DoorSensorBloc extends Bloc { try { emit(DoorSensorLoadingState()); var response = await DevicesAPI.getReportLogs( - startTime: - startTime.toString(), - endTime: endTime.toString(), + startTime: startTime.toString(), + endTime: endTime.toString(), deviceUuid: DSId, code: 'doorcontact_state', ); @@ -142,16 +135,14 @@ class DoorSensorBloc extends Bloc { _listenToChanges() { try { - DatabaseReference ref = - FirebaseDatabase.instance.ref('device-status/$DSId'); + DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$DSId'); Stream stream = ref.onValue; stream.listen((DatabaseEvent event) async { if (_timer != null) { await Future.delayed(const Duration(seconds: 2)); } - Map usersMap = - event.snapshot.value as Map; + Map usersMap = event.snapshot.value as Map; List statusList = []; usersMap['status'].forEach((element) { diff --git a/lib/features/devices/bloc/garage_door_bloc/garage_door_bloc.dart b/lib/features/devices/bloc/garage_door_bloc/garage_door_bloc.dart index bca98bd..c2063d4 100644 --- a/lib/features/devices/bloc/garage_door_bloc/garage_door_bloc.dart +++ b/lib/features/devices/bloc/garage_door_bloc/garage_door_bloc.dart @@ -65,8 +65,7 @@ class GarageDoorBloc extends Bloc { batteryPercentage: 0, ); - void _fetchStatus( - GarageDoorInitial event, Emitter emit) async { + void _fetchStatus(GarageDoorInitial event, Emitter emit) async { emit(GarageDoorLoadingState()); try { var response = await DevicesAPI.getDeviceStatus(GDId); @@ -81,7 +80,7 @@ class GarageDoorBloc extends Bloc { toggleDoor = deviceStatus.switch1; emit(UpdateState(garageSensor: deviceStatus)); Future.delayed(const Duration(milliseconds: 500)); - // _listenToChanges(); + _listenToChanges(); } catch (e) { emit(GarageDoorFailedState(errorMessage: e.toString())); return; @@ -114,8 +113,8 @@ class GarageDoorBloc extends Bloc { } } - void _toggleClosingReminder(ToggleClosingReminderEvent event, - Emitter emit) async { + void _toggleClosingReminder( + ToggleClosingReminderEvent event, Emitter emit) async { emit(LoadingNewSate(doorSensor: deviceStatus)); try { closingReminder = event.isClosingReminderEnabled; @@ -133,8 +132,7 @@ class GarageDoorBloc extends Bloc { } } - void _toggleDoorAlarm( - ToggleDoorAlarmEvent event, Emitter emit) async { + void _toggleDoorAlarm(ToggleDoorAlarmEvent event, Emitter emit) async { emit(LoadingNewSate(doorSensor: deviceStatus)); try { doorAlarm = event.isDoorAlarmEnabled; @@ -152,8 +150,7 @@ class GarageDoorBloc extends Bloc { } } - DeviceReport recordGroups = - DeviceReport(startTime: '0', endTime: '0', data: []); + DeviceReport recordGroups = DeviceReport(startTime: '0', endTime: '0', data: []); Future fetchLogsForLastMonth( ReportLogsInitial event, Emitter emit) async { @@ -172,8 +169,6 @@ class GarageDoorBloc extends Bloc { ); recordGroups = response; - - emit(UpdateState(garageSensor: deviceStatus)); } on DioException catch (e) { final errorData = e.response!.data; @@ -184,16 +179,14 @@ class GarageDoorBloc extends Bloc { _listenToChanges() { try { - DatabaseReference ref = - FirebaseDatabase.instance.ref('device-status/$GDId'); + DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$GDId'); Stream stream = ref.onValue; stream.listen((DatabaseEvent event) async { if (_timer != null) { await Future.delayed(const Duration(seconds: 2)); } - Map usersMap = - event.snapshot.value as Map; + Map usersMap = event.snapshot.value as Map; List statusList = []; usersMap['status'].forEach((element) { statusList.add(StatusModel(code: element['code'], value: true)); @@ -268,8 +261,7 @@ class GarageDoorBloc extends Bloc { deviceId: GDId, ); List jsonData = response; - listSchedule = - jsonData.map((item) => ScheduleModel.fromJson(item)).toList(); + listSchedule = jsonData.map((item) => ScheduleModel.fromJson(item)).toList(); emit(UpdateState(garageSensor: deviceStatus)); } on DioException catch (e) { final errorData = e.response!.data; @@ -280,13 +272,12 @@ class GarageDoorBloc extends Bloc { int? getTimeStampWithoutSeconds(DateTime? dateTime) { if (dateTime == null) return null; - DateTime dateTimeWithoutSeconds = DateTime(dateTime.year, dateTime.month, - dateTime.day, dateTime.hour, dateTime.minute); + DateTime dateTimeWithoutSeconds = + DateTime(dateTime.year, dateTime.month, dateTime.day, dateTime.hour, dateTime.minute); return dateTimeWithoutSeconds.millisecondsSinceEpoch ~/ 1000; } - Future toggleChange( - ToggleScheduleEvent event, Emitter emit) async { + Future toggleChange(ToggleScheduleEvent event, Emitter emit) async { try { emit(GarageDoorLoadingState()); final response = await DevicesAPI.changeSchedule( @@ -304,8 +295,7 @@ class GarageDoorBloc extends Bloc { } } - Future deleteSchedule( - DeleteScheduleEvent event, Emitter emit) async { + Future deleteSchedule(DeleteScheduleEvent event, Emitter emit) async { try { emit(GarageDoorLoadingState()); final response = await DevicesAPI.deleteSchedule( @@ -324,15 +314,13 @@ class GarageDoorBloc extends Bloc { } } - void toggleSelectedIndex( - ToggleSelectedEvent event, Emitter emit) { + void toggleSelectedIndex(ToggleSelectedEvent event, Emitter emit) { emit(GarageDoorLoadingState()); selectedTabIndex = event.index; emit(ChangeSlidingSegmentState(value: selectedTabIndex)); } - void toggleCreateSchedule( - ToggleCreateScheduleEvent event, Emitter emit) { + void toggleCreateSchedule(ToggleCreateScheduleEvent event, Emitter emit) { emit(GarageDoorLoadingState()); createSchedule = !createSchedule; selectedDays.clear(); @@ -349,16 +337,13 @@ class GarageDoorBloc extends Bloc { int secondSelected = 0; bool toggleDoor = false; - Future selectSeconds( - SelectSecondsEvent event, Emitter emit) async { + Future selectSeconds(SelectSecondsEvent event, Emitter emit) async { try { emit(GarageDoorLoadingState()); secondSelected = event.seconds; await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: GDId, code: 'tr_timecon', value: secondSelected), - GDId); + DeviceControlModel(deviceId: GDId, code: 'tr_timecon', value: secondSelected), GDId); emit(UpdateState(garageSensor: deviceStatus)); } on DioException catch (e) { final errorData = e.response!.data; @@ -367,15 +352,12 @@ class GarageDoorBloc extends Bloc { } } - openCloseGarageDoor( - ToggleDoorEvent event, Emitter emit) async { + openCloseGarageDoor(ToggleDoorEvent event, Emitter emit) async { emit(GarageDoorLoadingState()); try { toggleDoor = !event.toggle; await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: GDId, code: 'switch_1', value: toggleDoor), - GDId); + DeviceControlModel(deviceId: GDId, code: 'switch_1', value: toggleDoor), GDId); add(const GarageDoorInitial()); emit(UpdateState(garageSensor: deviceStatus)); } on DioException catch (e) { @@ -385,16 +367,13 @@ class GarageDoorBloc extends Bloc { } } - void _setCounterValue( - SetCounterValue event, Emitter emit) async { + void _setCounterValue(SetCounterValue event, Emitter emit) async { emit(LoadingNewSate(doorSensor: deviceStatus)); int seconds = 0; try { seconds = event.duration.inSeconds; final response = await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: GDId, code: 'countdown_1', value: seconds), - GDId); + DeviceControlModel(deviceId: GDId, code: 'countdown_1', value: seconds), GDId); if (response['success'] ?? false) { deviceStatus.countdown1 = seconds; @@ -414,8 +393,7 @@ class GarageDoorBloc extends Bloc { } } - void _getCounterValue( - GetCounterEvent event, Emitter emit) async { + void _getCounterValue(GetCounterEvent event, Emitter emit) async { emit(LoadingInitialState()); try { var response = await DevicesAPI.getDeviceStatus(GDId); @@ -456,8 +434,7 @@ class GarageDoorBloc extends Bloc { List groupList = []; bool allSwitchesOn = true; - void _fetchWizardStatus( - InitialWizardEvent event, Emitter emit) async { + void _fetchWizardStatus(InitialWizardEvent event, Emitter emit) async { emit(LoadingInitialState()); try { devicesList = []; @@ -467,8 +444,7 @@ class GarageDoorBloc extends Bloc { HomeCubit.getInstance().selectedSpace?.id ?? '', 'GD'); for (int i = 0; i < devicesList.length; i++) { - var response = - await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? ''); + var response = await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? ''); List statusModelList = []; for (var status in response['status']) { statusModelList.add(StatusModel.fromJson(status)); @@ -497,8 +473,7 @@ class GarageDoorBloc extends Bloc { } } - void _groupAllOn( - GroupAllOnEvent event, Emitter emit) async { + void _groupAllOn(GroupAllOnEvent event, Emitter emit) async { emit(LoadingNewSate(doorSensor: deviceStatus)); try { // Set all switches (firstSwitch and secondSwitch) based on the event value (on/off) @@ -510,8 +485,7 @@ class GarageDoorBloc extends Bloc { emit(UpdateGroupState(garageList: groupList, allSwitches: true)); // Get a list of all device IDs - List allDeviceIds = - groupList.map((device) => device.deviceId).toList(); + List allDeviceIds = groupList.map((device) => device.deviceId).toList(); // First call for switch_1 final response = await DevicesAPI.deviceBatchController( @@ -531,8 +505,7 @@ class GarageDoorBloc extends Bloc { } } - void _groupAllOff( - GroupAllOffEvent event, Emitter emit) async { + void _groupAllOff(GroupAllOffEvent event, Emitter emit) async { emit(LoadingNewSate(doorSensor: deviceStatus)); try { // Set all switches (firstSwitch and secondSwitch) based on the event value (on/off) @@ -544,8 +517,7 @@ class GarageDoorBloc extends Bloc { emit(UpdateGroupState(garageList: groupList, allSwitches: false)); // Get a list of all device IDs - List allDeviceIds = - groupList.map((device) => device.deviceId).toList(); + List allDeviceIds = groupList.map((device) => device.deviceId).toList(); // First call for switch_1 final response = await DevicesAPI.deviceBatchController( @@ -566,8 +538,8 @@ class GarageDoorBloc extends Bloc { } } - void _changeFirstWizardSwitch(ChangeFirstWizardSwitchStatusEvent event, - Emitter emit) async { + void _changeFirstWizardSwitch( + ChangeFirstWizardSwitchStatusEvent event, Emitter emit) async { emit(LoadingNewSate(doorSensor: deviceStatus)); try { bool allSwitchesValue = true; @@ -580,8 +552,7 @@ class GarageDoorBloc extends Bloc { } }); - emit(UpdateGroupState( - garageList: groupList, allSwitches: allSwitchesValue)); + emit(UpdateGroupState(garageList: groupList, allSwitches: allSwitchesValue)); final response = await DevicesAPI.deviceBatchController( code: 'switch_1', @@ -597,16 +568,13 @@ class GarageDoorBloc extends Bloc { } } - void _setTimeOutAlarm( - SetTimeOutValue event, Emitter emit) async { + void _setTimeOutAlarm(SetTimeOutValue event, Emitter emit) async { emit(LoadingNewSate(doorSensor: deviceStatus)); int seconds = 0; try { seconds = event.duration.inSeconds; final response = await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: GDId, code: 'countdown_alarm', value: seconds), - GDId); + DeviceControlModel(deviceId: GDId, code: 'countdown_alarm', value: seconds), GDId); if (response['success'] ?? false) { deviceStatus.countdownAlarm = seconds; diff --git a/lib/features/devices/bloc/one_gang_bloc/one_gang_bloc.dart b/lib/features/devices/bloc/one_gang_bloc/one_gang_bloc.dart index fc89c72..6a90042 100644 --- a/lib/features/devices/bloc/one_gang_bloc/one_gang_bloc.dart +++ b/lib/features/devices/bloc/one_gang_bloc/one_gang_bloc.dart @@ -26,8 +26,7 @@ class OneGangBloc extends Bloc { bool oneGangGroup = false; List devicesList = []; - OneGangBloc({required this.oneGangId, required this.switchCode}) - : super(InitialState()) { + OneGangBloc({required this.oneGangId, required this.switchCode}) : super(InitialState()) { on(_fetchOneGangStatus); on(_oneGangUpdated); on(_changeFirstSwitch); @@ -50,8 +49,7 @@ class OneGangBloc extends Bloc { on(_groupAllOff); } - void _fetchOneGangStatus( - InitialEvent event, Emitter emit) async { + void _fetchOneGangStatus(InitialEvent event, Emitter emit) async { emit(LoadingInitialState()); try { var response = await DevicesAPI.getDeviceStatus(oneGangId); @@ -61,7 +59,7 @@ class OneGangBloc extends Bloc { } deviceStatus = OneGangModel.fromJson(statusModelList); emit(UpdateState(oneGangModel: deviceStatus)); - // _listenToChanges(); + _listenToChanges(); } catch (e) { emit(FailedState(error: e.toString())); return; @@ -70,21 +68,18 @@ class OneGangBloc extends Bloc { _listenToChanges() { try { - DatabaseReference ref = - FirebaseDatabase.instance.ref('device-status/$oneGangId'); + DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$oneGangId'); Stream stream = ref.onValue; stream.listen((DatabaseEvent event) async { if (_timer != null) { await Future.delayed(const Duration(seconds: 2)); } - Map usersMap = - event.snapshot.value as Map; + Map usersMap = event.snapshot.value as Map; List statusList = []; usersMap['status'].forEach((element) { - statusList - .add(StatusModel(code: element['code'], value: element['value'])); + statusList.add(StatusModel(code: element['code'], value: element['value'])); }); deviceStatus = OneGangModel.fromJson(statusList); @@ -99,8 +94,7 @@ class OneGangBloc extends Bloc { emit(UpdateState(oneGangModel: deviceStatus)); } - void _changeFirstSwitch( - ChangeFirstSwitchStatusEvent event, Emitter emit) async { + void _changeFirstSwitch(ChangeFirstSwitchStatusEvent event, Emitter emit) async { emit(LoadingNewSate(oneGangModel: deviceStatus)); try { deviceStatus.firstSwitch = !event.value; @@ -125,20 +119,17 @@ class OneGangBloc extends Bloc { } } - void _changeSliding( - ChangeSlidingSegment event, Emitter emit) async { + void _changeSliding(ChangeSlidingSegment event, Emitter emit) async { emit(ChangeSlidingSegmentState(value: event.value)); } - void _setCounterValue( - SetCounterValue event, Emitter emit) async { + void _setCounterValue(SetCounterValue event, Emitter emit) async { emit(LoadingNewSate(oneGangModel: deviceStatus)); int seconds = 0; try { seconds = event.duration.inSeconds; final response = await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: oneGangId, code: event.deviceCode, value: seconds), + DeviceControlModel(deviceId: oneGangId, code: event.deviceCode, value: seconds), oneGangId); if (response['success'] ?? false) { @@ -161,8 +152,7 @@ class OneGangBloc extends Bloc { } } - void _getCounterValue( - GetCounterEvent event, Emitter emit) async { + void _getCounterValue(GetCounterEvent event, Emitter emit) async { emit(LoadingInitialState()); try { var response = await DevicesAPI.getDeviceStatus(oneGangId); @@ -251,8 +241,7 @@ class OneGangBloc extends Bloc { deviceId: oneGangId, ); List jsonData = response; - listSchedule = - jsonData.map((item) => ScheduleModel.fromJson(item)).toList(); + listSchedule = jsonData.map((item) => ScheduleModel.fromJson(item)).toList(); emit(InitialState()); } on DioException catch (e) { final errorData = e.response!.data; @@ -263,13 +252,12 @@ class OneGangBloc extends Bloc { int? getTimeStampWithoutSeconds(DateTime? dateTime) { if (dateTime == null) return null; - DateTime dateTimeWithoutSeconds = DateTime(dateTime.year, dateTime.month, - dateTime.day, dateTime.hour, dateTime.minute); + DateTime dateTimeWithoutSeconds = + DateTime(dateTime.year, dateTime.month, dateTime.day, dateTime.hour, dateTime.minute); return dateTimeWithoutSeconds.millisecondsSinceEpoch ~/ 1000; } - Future toggleChange( - ToggleScheduleEvent event, Emitter emit) async { + Future toggleChange(ToggleScheduleEvent event, Emitter emit) async { try { emit(LoadingInitialState()); final response = await DevicesAPI.changeSchedule( @@ -288,8 +276,7 @@ class OneGangBloc extends Bloc { } } - Future deleteSchedule( - DeleteScheduleEvent event, Emitter emit) async { + Future deleteSchedule(DeleteScheduleEvent event, Emitter emit) async { try { emit(LoadingInitialState()); final response = await DevicesAPI.deleteSchedule( @@ -309,8 +296,7 @@ class OneGangBloc extends Bloc { } } - void toggleCreateSchedule( - ToggleCreateScheduleEvent event, Emitter emit) { + void toggleCreateSchedule(ToggleCreateScheduleEvent event, Emitter emit) { emit(LoadingInitialState()); createSchedule = !createSchedule; selectedDays.clear(); @@ -339,8 +325,7 @@ class OneGangBloc extends Bloc { int selectedTabIndex = 0; - void toggleSelectedIndex( - ToggleSelectedEvent event, Emitter emit) { + void toggleSelectedIndex(ToggleSelectedEvent event, Emitter emit) { emit(LoadingInitialState()); selectedTabIndex = event.index; emit(ChangeSlidingSegmentState(value: selectedTabIndex)); @@ -349,8 +334,7 @@ class OneGangBloc extends Bloc { List groupOneGangList = []; bool allSwitchesOn = true; - void _fetchOneGangWizardStatus( - InitialWizardEvent event, Emitter emit) async { + void _fetchOneGangWizardStatus(InitialWizardEvent event, Emitter emit) async { emit(LoadingInitialState()); try { devicesList = []; @@ -360,8 +344,7 @@ class OneGangBloc extends Bloc { HomeCubit.getInstance().selectedSpace?.id ?? '', '1G'); for (int i = 0; i < devicesList.length; i++) { - var response = - await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? ''); + var response = await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? ''); List statusModelList = []; for (var status in response['status']) { statusModelList.add(StatusModel.fromJson(status)); @@ -382,16 +365,15 @@ class OneGangBloc extends Bloc { return true; }); } - emit(UpdateGroupState( - oneGangList: groupOneGangList, allSwitches: allSwitchesOn)); + emit(UpdateGroupState(oneGangList: groupOneGangList, allSwitches: allSwitchesOn)); } catch (e) { emit(FailedState(error: e.toString())); return; } } - void _changeFirstWizardSwitch(ChangeFirstWizardSwitchStatusEvent event, - Emitter emit) async { + void _changeFirstWizardSwitch( + ChangeFirstWizardSwitchStatusEvent event, Emitter emit) async { emit(LoadingNewSate(oneGangModel: deviceStatus)); try { bool allSwitchesValue = true; @@ -404,8 +386,7 @@ class OneGangBloc extends Bloc { } }); - emit(UpdateGroupState( - oneGangList: groupOneGangList, allSwitches: allSwitchesValue)); + emit(UpdateGroupState(oneGangList: groupOneGangList, allSwitches: allSwitchesValue)); final response = await DevicesAPI.deviceBatchController( code: 'switch_1', @@ -433,8 +414,7 @@ class OneGangBloc extends Bloc { emit(UpdateGroupState(oneGangList: groupOneGangList, allSwitches: true)); // Get a list of all device IDs - List allDeviceIds = - groupOneGangList.map((device) => device.deviceId).toList(); + List allDeviceIds = groupOneGangList.map((device) => device.deviceId).toList(); // First call for switch_1 final response = await DevicesAPI.deviceBatchController( @@ -466,8 +446,7 @@ class OneGangBloc extends Bloc { emit(UpdateGroupState(oneGangList: groupOneGangList, allSwitches: false)); // Get a list of all device IDs - List allDeviceIds = - groupOneGangList.map((device) => device.deviceId).toList(); + List allDeviceIds = groupOneGangList.map((device) => device.deviceId).toList(); // First call for switch_1 final response = await DevicesAPI.deviceBatchController( diff --git a/lib/features/devices/bloc/one_touch_bloc/one_touch_bloc.dart b/lib/features/devices/bloc/one_touch_bloc/one_touch_bloc.dart index 644cf4d..0fd3f34 100644 --- a/lib/features/devices/bloc/one_touch_bloc/one_touch_bloc.dart +++ b/lib/features/devices/bloc/one_touch_bloc/one_touch_bloc.dart @@ -30,8 +30,7 @@ class OneTouchBloc extends Bloc { bool oneTouchGroup = false; List devicesList = []; - OneTouchBloc({required this.oneTouchId, required this.switchCode}) - : super(InitialState()) { + OneTouchBloc({required this.oneTouchId, required this.switchCode}) : super(InitialState()) { on(_fetchOneTouchStatus); on(_oneTouchUpdated); on(_changeFirstSwitch); @@ -54,8 +53,7 @@ class OneTouchBloc extends Bloc { on(_changeStatus); } - void _fetchOneTouchStatus( - InitialEvent event, Emitter emit) async { + void _fetchOneTouchStatus(InitialEvent event, Emitter emit) async { emit(LoadingInitialState()); try { var response = await DevicesAPI.getDeviceStatus(oneTouchId); @@ -65,7 +63,7 @@ class OneTouchBloc extends Bloc { } deviceStatus = OneTouchModel.fromJson(statusModelList); emit(UpdateState(oneTouchModel: deviceStatus)); - // _listenToChanges(); + _listenToChanges(); } catch (e) { emit(FailedState(error: e.toString())); return; @@ -74,21 +72,18 @@ class OneTouchBloc extends Bloc { _listenToChanges() { try { - DatabaseReference ref = - FirebaseDatabase.instance.ref('device-status/$oneTouchId'); + DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$oneTouchId'); Stream stream = ref.onValue; stream.listen((DatabaseEvent event) async { if (_timer != null) { await Future.delayed(const Duration(seconds: 2)); } - Map usersMap = - event.snapshot.value as Map; + Map usersMap = event.snapshot.value as Map; List statusList = []; usersMap['status'].forEach((element) { - statusList - .add(StatusModel(code: element['code'], value: element['value'])); + statusList.add(StatusModel(code: element['code'], value: element['value'])); }); deviceStatus = OneTouchModel.fromJson(statusList); @@ -103,8 +98,7 @@ class OneTouchBloc extends Bloc { emit(UpdateState(oneTouchModel: deviceStatus)); } - void _changeFirstSwitch( - ChangeFirstSwitchStatusEvent event, Emitter emit) async { + void _changeFirstSwitch(ChangeFirstSwitchStatusEvent event, Emitter emit) async { emit(LoadingNewSate(oneTouchModel: deviceStatus)); try { deviceStatus.firstSwitch = !event.value; @@ -129,20 +123,17 @@ class OneTouchBloc extends Bloc { } } - void _changeSliding( - ChangeSlidingSegment event, Emitter emit) async { + void _changeSliding(ChangeSlidingSegment event, Emitter emit) async { emit(ChangeSlidingSegmentState(value: event.value)); } - void _setCounterValue( - SetCounterValue event, Emitter emit) async { + void _setCounterValue(SetCounterValue event, Emitter emit) async { emit(LoadingNewSate(oneTouchModel: deviceStatus)); int seconds = 0; try { seconds = event.duration.inSeconds; final response = await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: oneTouchId, code: event.deviceCode, value: seconds), + DeviceControlModel(deviceId: oneTouchId, code: event.deviceCode, value: seconds), oneTouchId); if (response['success'] ?? false) { @@ -165,8 +156,7 @@ class OneTouchBloc extends Bloc { } } - void _getCounterValue( - GetCounterEvent event, Emitter emit) async { + void _getCounterValue(GetCounterEvent event, Emitter emit) async { emit(LoadingInitialState()); try { var response = await DevicesAPI.getDeviceStatus(oneTouchId); @@ -255,8 +245,7 @@ class OneTouchBloc extends Bloc { deviceId: oneTouchId, ); List jsonData = response; - listSchedule = - jsonData.map((item) => ScheduleModel.fromJson(item)).toList(); + listSchedule = jsonData.map((item) => ScheduleModel.fromJson(item)).toList(); emit(InitialState()); } on DioException catch (e) { final errorData = e.response!.data; @@ -267,13 +256,12 @@ class OneTouchBloc extends Bloc { int? getTimeStampWithoutSeconds(DateTime? dateTime) { if (dateTime == null) return null; - DateTime dateTimeWithoutSeconds = DateTime(dateTime.year, dateTime.month, - dateTime.day, dateTime.hour, dateTime.minute); + DateTime dateTimeWithoutSeconds = + DateTime(dateTime.year, dateTime.month, dateTime.day, dateTime.hour, dateTime.minute); return dateTimeWithoutSeconds.millisecondsSinceEpoch ~/ 1000; } - Future toggleChange( - ToggleScheduleEvent event, Emitter emit) async { + Future toggleChange(ToggleScheduleEvent event, Emitter emit) async { try { emit(LoadingInitialState()); final response = await DevicesAPI.changeSchedule( @@ -292,8 +280,7 @@ class OneTouchBloc extends Bloc { } } - Future deleteSchedule( - DeleteScheduleEvent event, Emitter emit) async { + Future deleteSchedule(DeleteScheduleEvent event, Emitter emit) async { try { emit(LoadingInitialState()); final response = await DevicesAPI.deleteSchedule( @@ -313,8 +300,7 @@ class OneTouchBloc extends Bloc { } } - void toggleCreateSchedule( - ToggleCreateScheduleEvent event, Emitter emit) { + void toggleCreateSchedule(ToggleCreateScheduleEvent event, Emitter emit) { emit(LoadingInitialState()); createSchedule = !createSchedule; selectedDays.clear(); @@ -343,8 +329,7 @@ class OneTouchBloc extends Bloc { int selectedTabIndex = 0; - void toggleSelectedIndex( - ToggleSelectedEvent event, Emitter emit) { + void toggleSelectedIndex(ToggleSelectedEvent event, Emitter emit) { emit(LoadingInitialState()); selectedTabIndex = event.index; emit(ChangeSlidingSegmentState(value: selectedTabIndex)); @@ -353,8 +338,7 @@ class OneTouchBloc extends Bloc { List groupOneTouchList = []; bool allSwitchesOn = true; - void _fetchOneTouchWizardStatus( - InitialWizardEvent event, Emitter emit) async { + void _fetchOneTouchWizardStatus(InitialWizardEvent event, Emitter emit) async { emit(LoadingInitialState()); try { devicesList = []; @@ -364,8 +348,7 @@ class OneTouchBloc extends Bloc { HomeCubit.getInstance().selectedSpace?.id ?? '', '1GT'); for (int i = 0; i < devicesList.length; i++) { - var response = - await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? ''); + var response = await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? ''); List statusModelList = []; for (var status in response['status']) { statusModelList.add(StatusModel.fromJson(status)); @@ -386,16 +369,15 @@ class OneTouchBloc extends Bloc { return true; }); } - emit(UpdateGroupState( - oneTouchList: groupOneTouchList, allSwitches: allSwitchesOn)); + emit(UpdateGroupState(oneTouchList: groupOneTouchList, allSwitches: allSwitchesOn)); } catch (e) { emit(FailedState(error: e.toString())); return; } } - void _changeFirstWizardSwitch(ChangeFirstWizardSwitchStatusEvent event, - Emitter emit) async { + void _changeFirstWizardSwitch( + ChangeFirstWizardSwitchStatusEvent event, Emitter emit) async { emit(LoadingNewSate(oneTouchModel: deviceStatus)); try { bool allSwitchesValue = true; @@ -413,8 +395,7 @@ class OneTouchBloc extends Bloc { value: !event.value, ); - emit(UpdateGroupState( - oneTouchList: groupOneTouchList, allSwitches: allSwitchesValue)); + emit(UpdateGroupState(oneTouchList: groupOneTouchList, allSwitches: allSwitchesValue)); if (response['success']) { add(InitialEvent(groupScreen: oneTouchGroup)); } @@ -432,12 +413,10 @@ class OneTouchBloc extends Bloc { } // Emit the state with updated values - emit( - UpdateGroupState(oneTouchList: groupOneTouchList, allSwitches: true)); + emit(UpdateGroupState(oneTouchList: groupOneTouchList, allSwitches: true)); // Get a list of all device IDs - List allDeviceIds = - groupOneTouchList.map((device) => device.deviceId).toList(); + List allDeviceIds = groupOneTouchList.map((device) => device.deviceId).toList(); // First call for switch_1 final response1 = await DevicesAPI.deviceBatchController( @@ -466,12 +445,10 @@ class OneTouchBloc extends Bloc { } // Emit the state with updated values - emit(UpdateGroupState( - oneTouchList: groupOneTouchList, allSwitches: false)); + emit(UpdateGroupState(oneTouchList: groupOneTouchList, allSwitches: false)); // Get a list of all device IDs - List allDeviceIds = - groupOneTouchList.map((device) => device.deviceId).toList(); + List allDeviceIds = groupOneTouchList.map((device) => device.deviceId).toList(); // First call for switch_1 final response1 = await DevicesAPI.deviceBatchController( @@ -495,8 +472,7 @@ class OneTouchBloc extends Bloc { String statusSelected = ''; String optionSelected = ''; - Future _changeStatus( - ChangeStatusEvent event, Emitter emit) async { + Future _changeStatus(ChangeStatusEvent event, Emitter emit) async { try { emit(LoadingInitialState()); @@ -521,10 +497,7 @@ class OneTouchBloc extends Bloc { final selectedControl = controlMap[optionSelected]?[statusSelected]; if (selectedControl != null) { await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: oneTouchId, - code: optionSelected, - value: selectedControl), + DeviceControlModel(deviceId: oneTouchId, code: optionSelected, value: selectedControl), oneTouchId, ); } else { diff --git a/lib/features/devices/bloc/smart_door_bloc/smart_door_bloc.dart b/lib/features/devices/bloc/smart_door_bloc/smart_door_bloc.dart index f8f9563..236c623 100644 --- a/lib/features/devices/bloc/smart_door_bloc/smart_door_bloc.dart +++ b/lib/features/devices/bloc/smart_door_bloc/smart_door_bloc.dart @@ -37,8 +37,7 @@ class SmartDoorBloc extends Bloc { on(selectTimeOfLinePassword); on(selectTimeOnlinePassword); on(deletePassword); - on( - generateAndSavePasswordTimeLimited); + on(generateAndSavePasswordTimeLimited); on(generateAndSavePasswordOneTime); on(toggleDaySelection); on(_renamePassword); @@ -60,8 +59,7 @@ class SmartDoorBloc extends Bloc { List? oneTimePasswords = []; List? timeLimitPasswords = []; - Future generate7DigitNumber( - GeneratePasswordEvent event, Emitter emit) async { + Future generate7DigitNumber(GeneratePasswordEvent event, Emitter emit) async { emit(LoadingInitialState()); passwordController.clear(); Random random = Random(); @@ -73,8 +71,7 @@ class SmartDoorBloc extends Bloc { } Future generateAndSavePasswordOneTime( - GenerateAndSavePasswordOneTimeEvent event, - Emitter emit) async { + GenerateAndSavePasswordOneTimeEvent event, Emitter emit) async { try { if (isSavingPassword) return; isSavingPassword = true; @@ -95,8 +92,7 @@ class SmartDoorBloc extends Bloc { } } - void _fetchSmartDoorStatus( - InitialEvent event, Emitter emit) async { + void _fetchSmartDoorStatus(InitialEvent event, Emitter emit) async { try { emit(LoadingInitialState()); var response = await DevicesAPI.getDeviceStatus(deviceId); @@ -106,7 +102,7 @@ class SmartDoorBloc extends Bloc { } deviceStatus = SmartDoorModel.fromJson(statusModelList); emit(UpdateState(smartDoorModel: deviceStatus)); - // _listenToChanges(); + _listenToChanges(); } catch (e) { emit(FailedState(errorMessage: e.toString())); return; @@ -115,18 +111,15 @@ class SmartDoorBloc extends Bloc { _listenToChanges() { try { - DatabaseReference ref = - FirebaseDatabase.instance.ref('device-status/$deviceId'); + DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$deviceId'); Stream stream = ref.onValue; stream.listen((DatabaseEvent event) { - Map usersMap = - event.snapshot.value as Map; + Map usersMap = event.snapshot.value as Map; List statusList = []; usersMap['status'].forEach((element) { - statusList - .add(StatusModel(code: element['code'], value: element['value'])); + statusList.add(StatusModel(code: element['code'], value: element['value'])); }); deviceStatus = SmartDoorModel.fromJson(statusList); @@ -140,14 +133,11 @@ class SmartDoorBloc extends Bloc { emit(UpdateState(smartDoorModel: deviceStatus)); } - void _renamePassword( - RenamePasswordEvent event, Emitter emit) async { + void _renamePassword(RenamePasswordEvent event, Emitter emit) async { try { emit(LoadingInitialState()); await DevicesAPI.renamePass( - name: passwordNameController.text, - doorLockUuid: deviceId, - passwordId: passwordId); + name: passwordNameController.text, doorLockUuid: deviceId, passwordId: passwordId); add(InitialOneTimePassword()); add(InitialTimeLimitPassword()); emit(UpdateState(smartDoorModel: deviceStatus)); @@ -157,58 +147,46 @@ class SmartDoorBloc extends Bloc { } } - void getTemporaryPasswords( - InitialPasswordsPage event, Emitter emit) async { + void getTemporaryPasswords(InitialPasswordsPage event, Emitter emit) async { try { emit(LoadingInitialState()); var response = await DevicesAPI.getTemporaryPasswords( deviceId, ); if (response is List) { - temporaryPasswords = - response.map((item) => TemporaryPassword.fromJson(item)).toList(); + temporaryPasswords = response.map((item) => TemporaryPassword.fromJson(item)).toList(); } else if (response is Map && response.containsKey('data')) { - temporaryPasswords = (response['data'] as List) - .map((item) => TemporaryPassword.fromJson(item)) - .toList(); + temporaryPasswords = + (response['data'] as List).map((item) => TemporaryPassword.fromJson(item)).toList(); } - emit(TemporaryPasswordsLoadedState( - temporaryPassword: temporaryPasswords!)); + emit(TemporaryPasswordsLoadedState(temporaryPassword: temporaryPasswords!)); } catch (e) { emit(FailedState(errorMessage: e.toString())); } } - void getOneTimePasswords( - InitialOneTimePassword event, Emitter emit) async { + void getOneTimePasswords(InitialOneTimePassword event, Emitter emit) async { try { emit(LoadingInitialState()); var response = await DevicesAPI.getOneTimePasswords(deviceId); if (response is List) { - oneTimePasswords = response - .map((item) => OfflinePasswordModel.fromJson(item)) - .toList(); + oneTimePasswords = response.map((item) => OfflinePasswordModel.fromJson(item)).toList(); } - emit(TemporaryPasswordsLoadedState( - temporaryPassword: temporaryPasswords!)); + emit(TemporaryPasswordsLoadedState(temporaryPassword: temporaryPasswords!)); } catch (e) { emit(FailedState(errorMessage: e.toString())); } } - void getTimeLimitPasswords( - InitialTimeLimitPassword event, Emitter emit) async { + void getTimeLimitPasswords(InitialTimeLimitPassword event, Emitter emit) async { try { emit(LoadingInitialState()); var response = await DevicesAPI.getTimeLimitPasswords(deviceId); if (response is List) { - timeLimitPasswords = response - .map((item) => OfflinePasswordModel.fromJson(item)) - .toList(); + timeLimitPasswords = response.map((item) => OfflinePasswordModel.fromJson(item)).toList(); } - emit(TemporaryPasswordsLoadedState( - temporaryPassword: temporaryPasswords!)); + emit(TemporaryPasswordsLoadedState(temporaryPassword: temporaryPasswords!)); } catch (e) { emit(FailedState(errorMessage: e.toString())); } @@ -229,8 +207,7 @@ class SmartDoorBloc extends Bloc { return repeat; } - bool setStartEndTime( - SetStartEndTimeEvent event, Emitter emit) { + bool setStartEndTime(SetStartEndTimeEvent event, Emitter emit) { emit(LoadingInitialState()); isStartEndTime = event.val; emit(IsStartEndState(isStartEndTime: isStartEndTime)); @@ -253,8 +230,7 @@ class SmartDoorBloc extends Bloc { emit(UpdateState(smartDoorModel: deviceStatus)); } - Future selectTimeOfLinePassword( - SelectTimeEvent event, Emitter emit) async { + Future selectTimeOfLinePassword(SelectTimeEvent event, Emitter emit) async { emit(ChangeTimeState()); final DateTime? picked = await showDatePicker( context: event.context, @@ -284,27 +260,20 @@ class SmartDoorBloc extends Bloc { ).millisecondsSinceEpoch ~/ 1000; // Divide by 1000 to remove milliseconds if (event.isEffective) { - if (expirationTimeTimeStamp != null && - selectedTimestamp > expirationTimeTimeStamp!) { - CustomSnackBar.displaySnackBar( - 'Effective Time cannot be later than Expiration Time.'); + if (expirationTimeTimeStamp != null && selectedTimestamp > expirationTimeTimeStamp!) { + CustomSnackBar.displaySnackBar('Effective Time cannot be later than Expiration Time.'); } else { - effectiveTime = selectedDateTime - .toString() - .split('.') - .first; // Remove seconds and milliseconds + effectiveTime = + selectedDateTime.toString().split('.').first; // Remove seconds and milliseconds effectiveTimeTimeStamp = selectedTimestamp; } } else { - if (effectiveTimeTimeStamp != null && - selectedTimestamp < effectiveTimeTimeStamp!) { + if (effectiveTimeTimeStamp != null && selectedTimestamp < effectiveTimeTimeStamp!) { CustomSnackBar.displaySnackBar( 'Expiration Time cannot be earlier than Effective Time.'); } else { - expirationTime = selectedDateTime - .toString() - .split('.') - .first; // Remove seconds and milliseconds + expirationTime = + selectedDateTime.toString().split('.').first; // Remove seconds and milliseconds expirationTimeTimeStamp = selectedTimestamp; } } @@ -360,27 +329,20 @@ class SmartDoorBloc extends Bloc { ).millisecondsSinceEpoch ~/ 1000; // Divide by 1000 to remove milliseconds if (event.isEffective) { - if (expirationTimeTimeStamp != null && - selectedTimestamp > expirationTimeTimeStamp!) { - CustomSnackBar.displaySnackBar( - 'Effective Time cannot be later than Expiration Time.'); + if (expirationTimeTimeStamp != null && selectedTimestamp > expirationTimeTimeStamp!) { + CustomSnackBar.displaySnackBar('Effective Time cannot be later than Expiration Time.'); } else { - effectiveTime = selectedDateTime - .toString() - .split('.') - .first; // Remove seconds and milliseconds + effectiveTime = + selectedDateTime.toString().split('.').first; // Remove seconds and milliseconds effectiveTimeTimeStamp = selectedTimestamp; } } else { - if (effectiveTimeTimeStamp != null && - selectedTimestamp < effectiveTimeTimeStamp!) { + if (effectiveTimeTimeStamp != null && selectedTimestamp < effectiveTimeTimeStamp!) { CustomSnackBar.displaySnackBar( 'Expiration Time cannot be earlier than Effective Time.'); } else { - expirationTime = selectedDateTime - .toString() - .split('.') - .first; // Remove seconds and milliseconds + expirationTime = + selectedDateTime.toString().split('.').first; // Remove seconds and milliseconds expirationTimeTimeStamp = selectedTimestamp; } } @@ -389,8 +351,7 @@ class SmartDoorBloc extends Bloc { } } - Future savePassword( - SavePasswordEvent event, Emitter emit) async { + Future savePassword(SavePasswordEvent event, Emitter emit) async { if (_validateInputs() || isSavingPassword) return; try { isSavingPassword = true; @@ -420,8 +381,7 @@ class SmartDoorBloc extends Bloc { } Future generateAndSavePasswordTimeLimited( - GenerateAndSavePasswordTimeLimitEvent event, - Emitter emit) async { + GenerateAndSavePasswordTimeLimitEvent event, Emitter emit) async { if (timeLimitValidate() || isSavingPassword) return; try { isSavingPassword = true; @@ -447,12 +407,10 @@ class SmartDoorBloc extends Bloc { } } - Future deletePassword( - DeletePasswordEvent event, Emitter emit) async { + Future deletePassword(DeletePasswordEvent event, Emitter emit) async { try { emit(LoadingInitialState()); - await DevicesAPI.deletePassword( - deviceId: deviceId, passwordId: event.passwordId) + await DevicesAPI.deletePassword(deviceId: deviceId, passwordId: event.passwordId) .then((value) async { add(InitialPasswordsPage()); }); @@ -487,8 +445,7 @@ class SmartDoorBloc extends Bloc { } if (repeat == true && (endTime == null || startTime == null)) { - CustomSnackBar.displaySnackBar( - 'Start Time and End time and the days required '); + CustomSnackBar.displaySnackBar('Start Time and End time and the days required '); return true; } return false; diff --git a/lib/features/devices/bloc/three_gang_bloc/three_gang_bloc.dart b/lib/features/devices/bloc/three_gang_bloc/three_gang_bloc.dart index 04f434c..78b9dd1 100644 --- a/lib/features/devices/bloc/three_gang_bloc/three_gang_bloc.dart +++ b/lib/features/devices/bloc/three_gang_bloc/three_gang_bloc.dart @@ -101,7 +101,7 @@ class ThreeGangBloc extends Bloc { } deviceStatus = ThreeGangModel.fromJson(statusModelList); emit(UpdateState(threeGangModel: deviceStatus)); - // _listenToChanges(); + _listenToChanges(); } } catch (e) { emit(FailedState(error: e.toString())); diff --git a/lib/features/devices/bloc/three_touch_bloc/three_touch_bloc.dart b/lib/features/devices/bloc/three_touch_bloc/three_touch_bloc.dart index beec442..0ac4edd 100644 --- a/lib/features/devices/bloc/three_touch_bloc/three_touch_bloc.dart +++ b/lib/features/devices/bloc/three_touch_bloc/three_touch_bloc.dart @@ -107,7 +107,7 @@ class ThreeTouchBloc extends Bloc { } deviceStatus = ThreeTouchModel.fromJson(statusModelList); emit(UpdateState(threeTouchModel: deviceStatus)); - // _listenToChanges(); + _listenToChanges(); } } catch (e) { emit(FailedState(error: e.toString())); diff --git a/lib/features/devices/bloc/two_gang_bloc/two_gang_bloc.dart b/lib/features/devices/bloc/two_gang_bloc/two_gang_bloc.dart index 7906348..bc14479 100644 --- a/lib/features/devices/bloc/two_gang_bloc/two_gang_bloc.dart +++ b/lib/features/devices/bloc/two_gang_bloc/two_gang_bloc.dart @@ -89,7 +89,7 @@ class TwoGangBloc extends Bloc { } deviceStatus = TwoGangModel.fromJson(statusModelList); emit(UpdateState(twoGangModel: deviceStatus)); - // _listenToChanges(); + _listenToChanges(); } catch (e) { emit(FailedState(error: e.toString())); return; diff --git a/lib/features/devices/bloc/two_touch_bloc/two_touch_bloc.dart b/lib/features/devices/bloc/two_touch_bloc/two_touch_bloc.dart index 7f66724..b83c034 100644 --- a/lib/features/devices/bloc/two_touch_bloc/two_touch_bloc.dart +++ b/lib/features/devices/bloc/two_touch_bloc/two_touch_bloc.dart @@ -95,7 +95,7 @@ class TwoTouchBloc extends Bloc { } deviceStatus = TwoTouchModel.fromJson(statusModelList); emit(UpdateState(twoTouchModel: deviceStatus)); - // _listenToChanges(); + _listenToChanges(); } catch (e) { emit(FailedState(error: e.toString())); return; diff --git a/lib/features/devices/bloc/wall_sensor_bloc/wall_sensor_bloc.dart b/lib/features/devices/bloc/wall_sensor_bloc/wall_sensor_bloc.dart index 36212c5..7c01795 100644 --- a/lib/features/devices/bloc/wall_sensor_bloc/wall_sensor_bloc.dart +++ b/lib/features/devices/bloc/wall_sensor_bloc/wall_sensor_bloc.dart @@ -20,9 +20,7 @@ class WallSensorBloc extends Bloc { on(_wallSensorUpdated); } - void _fetchCeilingSensorStatus( - InitialEvent event, - Emitter emit) async { + void _fetchCeilingSensorStatus(InitialEvent event, Emitter emit) async { emit(LoadingInitialState()); try { var response = await DevicesAPI.getDeviceStatus(deviceId); @@ -32,7 +30,7 @@ class WallSensorBloc extends Bloc { } deviceStatus = WallSensorModel.fromJson(statusModelList); emit(UpdateState(wallSensorModel: deviceStatus)); - // _listenToChanges(); + _listenToChanges(); } catch (e) { emit(FailedState(error: e.toString())); return; @@ -41,18 +39,15 @@ class WallSensorBloc extends Bloc { _listenToChanges() { try { - DatabaseReference ref = - FirebaseDatabase.instance.ref('device-status/$deviceId'); + DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$deviceId'); Stream stream = ref.onValue; stream.listen((DatabaseEvent event) { - Map usersMap = - event.snapshot.value as Map; + Map usersMap = event.snapshot.value as Map; List statusList = []; usersMap['status'].forEach((element) { - statusList - .add(StatusModel(code: element['code'], value: element['value'])); + statusList.add(StatusModel(code: element['code'], value: element['value'])); }); deviceStatus = WallSensorModel.fromJson(statusList); @@ -61,19 +56,15 @@ class WallSensorBloc extends Bloc { } catch (_) {} } - _wallSensorUpdated( - WallSensorUpdatedEvent event, Emitter emit) { + _wallSensorUpdated(WallSensorUpdatedEvent event, Emitter emit) { emit(UpdateState(wallSensorModel: deviceStatus)); } - void _changeIndicator( - ChangeIndicatorEvent event, Emitter emit) async { + void _changeIndicator(ChangeIndicatorEvent event, Emitter emit) async { emit(LoadingNewSate(wallSensorModel: deviceStatus)); try { final response = await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: deviceId, code: 'indicator', value: !event.value), - deviceId); + DeviceControlModel(deviceId: deviceId, code: 'indicator', value: !event.value), deviceId); if (response['success'] ?? false) { deviceStatus.indicator = !event.value; @@ -82,14 +73,11 @@ class WallSensorBloc extends Bloc { emit(UpdateState(wallSensorModel: deviceStatus)); } - void _changeValue( - ChangeValueEvent event, Emitter emit) async { + void _changeValue(ChangeValueEvent event, Emitter emit) async { emit(LoadingNewSate(wallSensorModel: deviceStatus)); try { final response = await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: deviceId, code: event.code, value: event.value), - deviceId); + DeviceControlModel(deviceId: deviceId, code: event.code, value: event.value), deviceId); if (response['success'] ?? false) { if (event.code == 'far_detection') { diff --git a/lib/features/devices/bloc/water_heater_bloc/water_heater_bloc.dart b/lib/features/devices/bloc/water_heater_bloc/water_heater_bloc.dart index e71f41a..0df2228 100644 --- a/lib/features/devices/bloc/water_heater_bloc/water_heater_bloc.dart +++ b/lib/features/devices/bloc/water_heater_bloc/water_heater_bloc.dart @@ -35,8 +35,7 @@ class WaterHeaterBloc extends Bloc { List listSchedule = []; DateTime? selectedTime = DateTime.now(); - WaterHeaterBloc({required this.whId, required this.switchCode}) - : super(WHInitialState()) { + WaterHeaterBloc({required this.whId, required this.switchCode}) : super(WHInitialState()) { on(_fetchWaterHeaterStatus); on(_changeFirstSwitch); on(_setCounterValue); @@ -61,8 +60,7 @@ class WaterHeaterBloc extends Bloc { on(_waterHeaterUpdated); } - void _fetchWaterHeaterStatus( - WaterHeaterInitial event, Emitter emit) async { + void _fetchWaterHeaterStatus(WaterHeaterInitial event, Emitter emit) async { emit(WHLoadingState()); try { var response = await DevicesAPI.getDeviceStatus(whId); @@ -74,7 +72,7 @@ class WaterHeaterBloc extends Bloc { statusModelList, ); emit(UpdateState(whModel: deviceStatus)); - // _listenToChanges(); + _listenToChanges(); } catch (e) { emit(WHFailedState(errorMessage: e.toString())); return; @@ -83,21 +81,18 @@ class WaterHeaterBloc extends Bloc { _listenToChanges() { try { - DatabaseReference ref = - FirebaseDatabase.instance.ref('device-status/$whId'); + DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$whId'); Stream stream = ref.onValue; stream.listen((DatabaseEvent event) async { if (_timer != null) { await Future.delayed(const Duration(seconds: 2)); } - Map usersMap = - event.snapshot.value as Map; + Map usersMap = event.snapshot.value as Map; List statusList = []; usersMap['status'].forEach((element) { - statusList - .add(StatusModel(code: element['code'], value: element['value'])); + statusList.add(StatusModel(code: element['code'], value: element['value'])); }); deviceStatus = WHModel.fromJson(statusList); @@ -108,14 +103,12 @@ class WaterHeaterBloc extends Bloc { } catch (_) {} } - _waterHeaterUpdated( - WaterHeaterUpdated event, Emitter emit) async { + _waterHeaterUpdated(WaterHeaterUpdated event, Emitter emit) async { emit(WHLoadingState()); emit(UpdateState(whModel: deviceStatus)); } - void _changeFirstSwitch( - WaterHeaterSwitch event, Emitter emit) async { + void _changeFirstSwitch(WaterHeaterSwitch event, Emitter emit) async { emit(LoadingNewSate(whModel: deviceStatus)); try { deviceStatus.firstSwitch = !event.whSwitch; @@ -125,10 +118,7 @@ class WaterHeaterBloc extends Bloc { } _timer = Timer(const Duration(milliseconds: 500), () async { final response = await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: whId, - code: 'switch_1', - value: deviceStatus.firstSwitch), + DeviceControlModel(deviceId: whId, code: 'switch_1', value: deviceStatus.firstSwitch), whId); if (!response['success']) { @@ -142,16 +132,13 @@ class WaterHeaterBloc extends Bloc { //=====================---------- timer ---------------------------------------- - void _setCounterValue( - SetCounterValue event, Emitter emit) async { + void _setCounterValue(SetCounterValue event, Emitter emit) async { emit(LoadingNewSate(whModel: deviceStatus)); int seconds = 0; try { seconds = event.duration.inSeconds; final response = await DevicesAPI.controlDevice( - DeviceControlModel( - deviceId: whId, code: event.deviceCode, value: seconds), - whId); + DeviceControlModel(deviceId: whId, code: event.deviceCode, value: seconds), whId); if (response['success'] ?? false) { if (event.deviceCode == 'countdown_1') { @@ -173,8 +160,7 @@ class WaterHeaterBloc extends Bloc { } } - void _getCounterValue( - GetCounterEvent event, Emitter emit) async { + void _getCounterValue(GetCounterEvent event, Emitter emit) async { emit(WHLoadingState()); try { var response = await DevicesAPI.getDeviceStatus(whId); @@ -264,8 +250,7 @@ class WaterHeaterBloc extends Bloc { deviceId: whId, ); List jsonData = response; - listSchedule = - jsonData.map((item) => ScheduleModel.fromJson(item)).toList(); + listSchedule = jsonData.map((item) => ScheduleModel.fromJson(item)).toList(); emit(WHInitialState()); } on DioException catch (e) { final errorData = e.response!.data; @@ -276,13 +261,12 @@ class WaterHeaterBloc extends Bloc { int? getTimeStampWithoutSeconds(DateTime? dateTime) { if (dateTime == null) return null; - DateTime dateTimeWithoutSeconds = DateTime(dateTime.year, dateTime.month, - dateTime.day, dateTime.hour, dateTime.minute); + DateTime dateTimeWithoutSeconds = + DateTime(dateTime.year, dateTime.month, dateTime.day, dateTime.hour, dateTime.minute); return dateTimeWithoutSeconds.millisecondsSinceEpoch ~/ 1000; } - Future toggleChange( - ToggleScheduleEvent event, Emitter emit) async { + Future toggleChange(ToggleScheduleEvent event, Emitter emit) async { try { emit(WHLoadingState()); final response = await DevicesAPI.changeSchedule( @@ -300,8 +284,7 @@ class WaterHeaterBloc extends Bloc { } } - Future deleteSchedule( - DeleteScheduleEvent event, Emitter emit) async { + Future deleteSchedule(DeleteScheduleEvent event, Emitter emit) async { try { emit(WHLoadingState()); final response = await DevicesAPI.deleteSchedule( @@ -320,8 +303,7 @@ class WaterHeaterBloc extends Bloc { } } - void _toggleCreateCirculate( - ToggleCreateCirculate event, Emitter emit) { + void _toggleCreateCirculate(ToggleCreateCirculate event, Emitter emit) { emit(WHLoadingState()); createCirculate = !createCirculate; selectedDays.clear(); @@ -329,15 +311,13 @@ class WaterHeaterBloc extends Bloc { emit(UpdateCreateScheduleState(createCirculate)); } - void toggleSelectedIndex( - ToggleSelectedEvent event, Emitter emit) { + void toggleSelectedIndex(ToggleSelectedEvent event, Emitter emit) { emit(WHLoadingState()); selectedTabIndex = event.index; emit(ChangeSlidingSegmentState(value: selectedTabIndex)); } - void toggleCreateSchedule( - ToggleCreateScheduleEvent event, Emitter emit) { + void toggleCreateSchedule(ToggleCreateScheduleEvent event, Emitter emit) { emit(WHLoadingState()); createSchedule = !createSchedule; selectedDays.clear(); @@ -386,8 +366,8 @@ class WaterHeaterBloc extends Bloc { List groupWaterHeaterList = []; bool allSwitchesOn = true; - void _changeFirstWizardSwitch(ChangeFirstWizardSwitchStatusEvent event, - Emitter emit) async { + void _changeFirstWizardSwitch( + ChangeFirstWizardSwitchStatusEvent event, Emitter emit) async { emit(LoadingNewSate(whModel: deviceStatus)); try { bool allSwitchesValue = true; @@ -399,8 +379,7 @@ class WaterHeaterBloc extends Bloc { allSwitchesValue = false; } }); - emit(UpdateGroupState( - twoGangList: groupWaterHeaterList, allSwitches: allSwitchesValue)); + emit(UpdateGroupState(twoGangList: groupWaterHeaterList, allSwitches: allSwitchesValue)); final response = await DevicesAPI.deviceBatchController( code: 'switch_1', @@ -415,8 +394,7 @@ class WaterHeaterBloc extends Bloc { } } - void _fetchWHWizardStatus( - InitialWizardEvent event, Emitter emit) async { + void _fetchWHWizardStatus(InitialWizardEvent event, Emitter emit) async { emit(WHLoadingState()); try { devicesList = []; @@ -426,8 +404,7 @@ class WaterHeaterBloc extends Bloc { HomeCubit.getInstance().selectedSpace?.id ?? '', 'WH'); for (int i = 0; i < devicesList.length; i++) { - var response = - await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? ''); + var response = await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? ''); List statusModelList = []; for (var status in response['status']) { statusModelList.add(StatusModel.fromJson(status)); @@ -449,27 +426,23 @@ class WaterHeaterBloc extends Bloc { return true; }); } - emit(UpdateGroupState( - twoGangList: groupWaterHeaterList, allSwitches: allSwitchesOn)); + emit(UpdateGroupState(twoGangList: groupWaterHeaterList, allSwitches: allSwitchesOn)); } catch (e) { // emit(FailedState(error: e.toString())); return; } } - void _groupAllOn( - GroupAllOnEvent event, Emitter emit) async { + void _groupAllOn(GroupAllOnEvent event, Emitter emit) async { emit(LoadingNewSate(whModel: deviceStatus)); try { for (int i = 0; i < groupWaterHeaterList.length; i++) { groupWaterHeaterList[i].firstSwitch = true; } - emit(UpdateGroupState( - twoGangList: groupWaterHeaterList, allSwitches: true)); + emit(UpdateGroupState(twoGangList: groupWaterHeaterList, allSwitches: true)); - List allDeviceIds = - groupWaterHeaterList.map((device) => device.deviceId).toList(); + List allDeviceIds = groupWaterHeaterList.map((device) => device.deviceId).toList(); final response = await DevicesAPI.deviceBatchController( code: 'switch_1', @@ -487,18 +460,15 @@ class WaterHeaterBloc extends Bloc { } } - void _groupAllOff( - GroupAllOffEvent event, Emitter emit) async { + void _groupAllOff(GroupAllOffEvent event, Emitter emit) async { emit(LoadingNewSate(whModel: deviceStatus)); try { for (int i = 0; i < groupWaterHeaterList.length; i++) { groupWaterHeaterList[i].firstSwitch = false; } - emit(UpdateGroupState( - twoGangList: groupWaterHeaterList, allSwitches: false)); + emit(UpdateGroupState(twoGangList: groupWaterHeaterList, allSwitches: false)); - List allDeviceIds = - groupWaterHeaterList.map((device) => device.deviceId).toList(); + List allDeviceIds = groupWaterHeaterList.map((device) => device.deviceId).toList(); final response = await DevicesAPI.deviceBatchController( code: 'switch_1', diff --git a/lib/features/devices/bloc/water_leak_bloc/water_leak_bloc.dart b/lib/features/devices/bloc/water_leak_bloc/water_leak_bloc.dart index 300c4f4..9e50f69 100644 --- a/lib/features/devices/bloc/water_leak_bloc/water_leak_bloc.dart +++ b/lib/features/devices/bloc/water_leak_bloc/water_leak_bloc.dart @@ -25,11 +25,9 @@ class WaterLeakBloc extends Bloc { bool lowBattery = false; bool closingReminder = false; bool waterAlarm = false; - WaterLeakModel deviceStatus = - WaterLeakModel(waterContactState: 'normal', batteryPercentage: 0); + WaterLeakModel deviceStatus = WaterLeakModel(waterContactState: 'normal', batteryPercentage: 0); - void _fetchStatus( - WaterLeakInitial event, Emitter emit) async { + void _fetchStatus(WaterLeakInitial event, Emitter emit) async { emit(WaterLeakLoadingState()); try { var response = await DevicesAPI.getDeviceStatus(WLId); @@ -43,15 +41,14 @@ class WaterLeakBloc extends Bloc { emit(UpdateState(waterSensor: deviceStatus)); Future.delayed(const Duration(milliseconds: 500)); - // _listenToChanges(); + _listenToChanges(); } catch (e) { emit(WaterLeakFailedState(errorMessage: e.toString())); return; } } - void _toggleLowBattery( - ToggleLowBatteryEvent event, Emitter emit) async { + void _toggleLowBattery(ToggleLowBatteryEvent event, Emitter emit) async { emit(LoadingNewSate(waterSensor: deviceStatus)); try { lowBattery = event.isLowBatteryEnabled; @@ -90,8 +87,7 @@ class WaterLeakBloc extends Bloc { } } - void _toggleWaterLeakAlarm( - ToggleWaterLeakAlarmEvent event, Emitter emit) async { + void _toggleWaterLeakAlarm(ToggleWaterLeakAlarmEvent event, Emitter emit) async { emit(LoadingNewSate(waterSensor: deviceStatus)); try { waterAlarm = event.isWaterLeakAlarmEnabled; @@ -109,11 +105,9 @@ class WaterLeakBloc extends Bloc { } } - DeviceReport recordGroups = - DeviceReport(startTime: '0', endTime: '0', data: []); + DeviceReport recordGroups = DeviceReport(startTime: '0', endTime: '0', data: []); - Future fetchLogsForLastMonth( - ReportLogsInitial event, Emitter emit) async { + Future fetchLogsForLastMonth(ReportLogsInitial event, Emitter emit) async { DateTime now = DateTime.now(); DateTime lastMonth = DateTime(now.year, now.month - 1, now.day); int startTime = lastMonth.millisecondsSinceEpoch; @@ -137,16 +131,14 @@ class WaterLeakBloc extends Bloc { _listenToChanges() { try { - DatabaseReference ref = - FirebaseDatabase.instance.ref('device-status/$WLId'); + DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$WLId'); Stream stream = ref.onValue; stream.listen((DatabaseEvent event) async { if (_timer != null) { await Future.delayed(const Duration(seconds: 2)); } - Map usersMap = - event.snapshot.value as Map; + Map usersMap = event.snapshot.value as Map; List statusList = []; usersMap['status'].forEach((element) { diff --git a/lib/features/devices/view/widgets/scene_listview.dart b/lib/features/devices/view/widgets/scene_listview.dart index 63b770f..4fa2031 100644 --- a/lib/features/devices/view/widgets/scene_listview.dart +++ b/lib/features/devices/view/widgets/scene_listview.dart @@ -40,13 +40,10 @@ class SceneListview extends StatelessWidget { sceneName: scene.name, ), ); - context - .read() - .add(const SmartSceneClearEvent()); + context.read().add(const SmartSceneClearEvent()); - BlocProvider.of(context).add( - FetchSceneTasksEvent( - sceneId: scene.id, isAutomation: false)); + BlocProvider.of(context) + .add(FetchSceneTasksEvent(sceneId: scene.id, isAutomation: false)); /// the state to set the scene type must be after the fetch BlocProvider.of(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( diff --git a/lib/features/scene/bloc/create_scene/create_scene_bloc.dart b/lib/features/scene/bloc/create_scene/create_scene_bloc.dart index 0a52b02..024faf4 100644 --- a/lib/features/scene/bloc/create_scene/create_scene_bloc.dart +++ b/lib/features/scene/bloc/create_scene/create_scene_bloc.dart @@ -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'; @@ -10,6 +9,7 @@ import 'package:syncrow_app/features/scene/enum/operation_dialog_type.dart'; import 'package:syncrow_app/features/scene/helper/scene_operations_data_helper.dart'; 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_static_function.dart'; import 'package:syncrow_app/navigation/navigation_service.dart'; import 'package:syncrow_app/services/api/scene_api.dart'; @@ -36,6 +36,10 @@ class CreateSceneBloc extends Bloc on(_selectConditionRule); on(_sceneTypeEvent); on(_onEffectiveTimeEvent); + on(_fetchIconScene); + on(_iconSelected); + on(_showInDeviceClicked); + on(_clearTabToRunSetting); } CreateSceneEnum sceneType = CreateSceneEnum.none; @@ -52,6 +56,9 @@ class CreateSceneBloc extends Bloc final Map automationComparatorValues = {}; String conditionRule = 'or'; EffectiveTime? effectiveTime; + List iconModelList = []; + String selectedIcon = ''; + bool showInDeviceScreen = false; FutureOr _onAddSceneTask(AddTaskEvent event, Emitter emit) { emit(CreateSceneLoading()); @@ -350,6 +357,8 @@ class CreateSceneBloc extends Bloc automationTempTasksList.clear(); automationSelectedValues.clear(); automationComparatorValues.clear(); + selectedIcon = ''; + showInDeviceScreen = false; effectiveTime = EffectiveTime(start: '00:00', end: '23:59', loops: '1111111'); sceneType = CreateSceneEnum.none; conditionRule = 'or'; @@ -380,6 +389,19 @@ class CreateSceneBloc extends Bloc )); } + FutureOr _clearTabToRunSetting(ClearTabToRunSetting event, Emitter emit) { + emit(CreateSceneLoading()); + selectedIcon = ''; + showInDeviceScreen = false; + emit(AddSceneTask( + tasksList: tasksList, + automationTasksList: automationTasksList, + condition: conditionRule, + showInDevice: showInDeviceScreen, + selectedIcon: selectedIcon, + iconModels: iconModelList)); + } + FutureOr _fetchSceneTasks( FetchSceneTasksEvent event, Emitter emit) async { emit(CreateSceneLoading()); @@ -392,6 +414,8 @@ class CreateSceneBloc extends Bloc automationTempTasksList.clear(); automationSelectedValues.clear(); automationComparatorValues.clear(); + selectedIcon = ''; + showInDeviceScreen = false; effectiveTime = EffectiveTime(start: '00:00', end: '23:59', loops: '1111111'); sceneType = CreateSceneEnum.none; conditionRule = 'or'; @@ -425,17 +449,23 @@ class CreateSceneBloc extends Bloc .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.from( 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')); @@ -445,6 +475,57 @@ class CreateSceneBloc extends Bloc } } + FutureOr _fetchIconScene(SceneIconEvent event, Emitter emit) async { + emit(CreateSceneLoading()); + try { + 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 _iconSelected(IconSelected event, Emitter 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 _showInDeviceClicked( + ShowOnDeviceClicked event, Emitter 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')); + } + } + String _getDayFromIndex(int index) { const days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']; return days[index]; diff --git a/lib/features/scene/bloc/create_scene/create_scene_event.dart b/lib/features/scene/bloc/create_scene/create_scene_event.dart index 74046bd..2b79f6d 100644 --- a/lib/features/scene/bloc/create_scene/create_scene_event.dart +++ b/lib/features/scene/bloc/create_scene/create_scene_event.dart @@ -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 get props => [sceneId, isAutomation]; @@ -183,3 +182,33 @@ class EffectiveTimePeriodEvent extends CreateSceneEvent { final EffectiveTime period; const EffectiveTimePeriodEvent(this.period); } + +class SceneIconEvent extends CreateSceneEvent {} + +class IconSelected extends CreateSceneEvent { + final String iconId; + final bool confirmSelection; + + const IconSelected({required this.iconId, required this.confirmSelection}); + + @override + List get props => [iconId]; +} + +class ShowOnDeviceClicked extends CreateSceneEvent { + final bool value; + + const ShowOnDeviceClicked({ + required this.value, + }); + + @override + List get props => [value]; +} + +class ClearTabToRunSetting extends CreateSceneEvent { + const ClearTabToRunSetting(); + + @override + List get props => []; +} diff --git a/lib/features/scene/bloc/create_scene/create_scene_state.dart b/lib/features/scene/bloc/create_scene/create_scene_state.dart index 4108738..be88cb4 100644 --- a/lib/features/scene/bloc/create_scene/create_scene_state.dart +++ b/lib/features/scene/bloc/create_scene/create_scene_state.dart @@ -23,8 +23,16 @@ class AddSceneTask extends CreateSceneState { final List tasksList; final List? automationTasksList; final String? condition; + final String? selectedIcon; + final List? 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 get props => [tasksList]; @@ -33,8 +41,7 @@ class AddSceneTask extends CreateSceneState { class TempHoldSceneTask extends CreateSceneState { final List tempTasksList; final List? automationTempTasksList; - const TempHoldSceneTask( - {required this.tempTasksList, this.automationTempTasksList}); + const TempHoldSceneTask({required this.tempTasksList, this.automationTempTasksList}); @override List get props => [tempTasksList]; diff --git a/lib/features/scene/bloc/scene_bloc/scene_bloc.dart b/lib/features/scene/bloc/scene_bloc/scene_bloc.dart index 047e9cb..701e30a 100644 --- a/lib/features/scene/bloc/scene_bloc/scene_bloc.dart +++ b/lib/features/scene/bloc/scene_bloc/scene_bloc.dart @@ -24,7 +24,7 @@ class SceneBloc extends Bloc { 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 { } } - Future _onLoadAutomation( - LoadAutomation event, Emitter emit) async { + Future _onLoadAutomation(LoadAutomation event, Emitter emit) async { emit(SceneLoading()); try { @@ -50,8 +49,7 @@ class SceneBloc extends Bloc { } } - Future _onSceneTrigger( - SceneTrigger event, Emitter emit) async { + Future _onSceneTrigger(SceneTrigger event, Emitter emit) async { final currentState = state; if (currentState is SceneLoaded) { emit(SceneLoaded( @@ -78,9 +76,8 @@ class SceneBloc extends Bloc { UpdateAutomationStatus event, Emitter emit) async { final currentState = state; if (currentState is SceneLoaded) { - final newLoadingStates = - Map.from(currentState.loadingStates) - ..[event.automationId] = true; + final newLoadingStates = Map.from(currentState.loadingStates) + ..[event.automationId] = true; emit(SceneLoaded( currentState.scenes, @@ -89,11 +86,11 @@ class SceneBloc extends Bloc { )); 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, diff --git a/lib/features/scene/bloc/scene_bloc/scene_event.dart b/lib/features/scene/bloc/scene_bloc/scene_event.dart index d580ed4..d72f3a7 100644 --- a/lib/features/scene/bloc/scene_bloc/scene_event.dart +++ b/lib/features/scene/bloc/scene_bloc/scene_event.dart @@ -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 get props => [unitId]; + List 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 get props => [automationStatusUpdate]; diff --git a/lib/features/scene/helper/scene_logic_helper.dart b/lib/features/scene/helper/scene_logic_helper.dart index 3219ba2..e6b8d33 100644 --- a/lib/features/scene/helper/scene_logic_helper.dart +++ b/lib/features/scene/helper/scene_logic_helper.dart @@ -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, diff --git a/lib/features/scene/model/create_scene_model.dart b/lib/features/scene/model/create_scene_model.dart index 5475b93..43f62cb 100644 --- a/lib/features/scene/model/create_scene_model.dart +++ b/lib/features/scene/model/create_scene_model.dart @@ -4,12 +4,16 @@ import 'package:flutter/foundation.dart'; class CreateSceneModel { String unitUuid; + String iconId; + bool showInDevice; String sceneName; String decisionExpr; List 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? 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 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 map) { return CreateSceneModel( unitUuid: map['unitUuid'] ?? '', + iconId: map['iconUuid'] ?? '', + showInDevice: map['showInHomePage'] ?? false, sceneName: map['sceneName'] ?? '', decisionExpr: map['decisionExpr'] ?? '', - actions: List.from( - map['actions']?.map((x) => CreateSceneAction.fromMap(x))), + actions: + List.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; } diff --git a/lib/features/scene/model/icon_model.dart b/lib/features/scene/model/icon_model.dart new file mode 100644 index 0000000..70f15e8 --- /dev/null +++ b/lib/features/scene/model/icon_model.dart @@ -0,0 +1,39 @@ +import 'dart:convert'; +import 'dart:typed_data'; + +class IconModel { + final String uuid; + final DateTime createdAt; + final DateTime updatedAt; + final String iconBase64; + + IconModel({ + required this.uuid, + required this.createdAt, + required this.updatedAt, + required this.iconBase64, + }); + + // Method to decode the icon from Base64 and return as Uint8List + Uint8List get iconBytes => base64Decode(iconBase64); + + // Factory constructor to create an instance from JSON + factory IconModel.fromJson(Map json) { + return IconModel( + uuid: json['uuid'] as String, + createdAt: DateTime.parse(json['createdAt'] as String), + updatedAt: DateTime.parse(json['updatedAt'] as String), + iconBase64: json['icon'] as String, + ); + } + + // Method to convert an instance back to JSON + Map toJson() { + return { + 'uuid': uuid, + 'createdAt': createdAt.toIso8601String(), + 'updatedAt': updatedAt.toIso8601String(), + 'icon': iconBase64, + }; + } +} diff --git a/lib/features/scene/model/scene_details_model.dart b/lib/features/scene/model/scene_details_model.dart index 646b3b1..99a2c5f 100644 --- a/lib/features/scene/model/scene_details_model.dart +++ b/lib/features/scene/model/scene_details_model.dart @@ -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 actions; final List? conditions; @@ -16,37 +18,35 @@ 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 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(), - 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 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(), + 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 toJson() => { "id": id, @@ -54,9 +54,8 @@ class SceneDetailsModel { "status": status, "type": type, "actions": List.from(actions.map((x) => x.toJson())), - "conditions": conditions != null - ? List.from(conditions!.map((x) => x.toJson())) - : null, + "conditions": + conditions != null ? List.from(conditions!.map((x) => x.toJson())) : null, "decisionExpr": decisionExpr, "effectiveTime": effectiveTime?.toJson(), }; @@ -89,7 +88,7 @@ class Action { ); } if (json["executorProperty"] == null) { - return null; + return null; } return Action( @@ -117,8 +116,7 @@ class ExecutorProperty { this.delaySeconds, }); - factory ExecutorProperty.fromJson(Map json) => - ExecutorProperty( + factory ExecutorProperty.fromJson(Map json) => ExecutorProperty( functionCode: json["functionCode"] ?? '', functionValue: json["functionValue"] ?? '', delaySeconds: json["delaySeconds"] ?? 0, @@ -144,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()); @@ -203,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()); diff --git a/lib/features/scene/model/scenes_model.dart b/lib/features/scene/model/scenes_model.dart index 4c0066c..0881ba9 100644 --- a/lib/features/scene/model/scenes_model.dart +++ b/lib/features/scene/model/scenes_model.dart @@ -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 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 toJson() => { "id": id, diff --git a/lib/features/scene/view/scene_auto_settings.dart b/lib/features/scene/view/scene_auto_settings.dart index af9db38..ba9f2da 100644 --- a/lib/features/scene/view/scene_auto_settings.dart +++ b/lib/features/scene/view/scene_auto_settings.dart @@ -1,12 +1,15 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.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_medium.dart'; import 'package:syncrow_app/utils/context_extension.dart'; import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; @@ -15,79 +18,240 @@ class SceneAutoSettings extends StatelessWidget { @override Widget build(BuildContext context) { - final sceneSettings = - ModalRoute.of(context)!.settings.arguments as Map? ?? - {}; + final sceneSettings = ModalRoute.of(context)!.settings.arguments as Map? ?? {}; final sceneId = sceneSettings['sceneId'] as String? ?? ''; - final isAutomation = context.read().sceneType == - CreateSceneEnum.deviceStatusChanges; + final isAutomation = + context.read().sceneType == CreateSceneEnum.deviceStatusChanges; final sceneName = sceneSettings['sceneName'] as String? ?? ''; - + bool showInDevice = context.read().showInDeviceScreen; + String selectedIcon = ''; return DefaultScaffold( - title: 'Settings', - padding: EdgeInsets.zero, - leading: IconButton( - onPressed: () { - Navigator.of(context).pop(); - }, - icon: const Icon( - Icons.arrow_back_ios, - )), - child: SizedBox( - height: MediaQuery.sizeOf(context).height, - child: Column( - children: [ - 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, + title: 'Settings', + padding: EdgeInsets.zero, + leading: IconButton( + onPressed: () { + Navigator.of(context).pop(); + }, + icon: const Icon( + Icons.arrow_back_ios, + )), + child: BlocBuilder(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(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( + builder: (context, state) { + if (state is CreateSceneLoading) { + 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(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); + } else { + return Container(); + } + }, + ), + ), + cancelTab: () { + Navigator.of(context).pop(); + }, + confirmTab: () { + BlocProvider.of(context).add( + IconSelected(iconId: selectedIcon, confirmSelection: true)); + Navigator.of(context).pop(); + }, + title: 'Icons', + ); + }, + ); + }, + 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( + 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(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, + )), + ], + ), + ], ), - Visibility( - visible: sceneName.isNotEmpty, - child: DeleteBottomSheetContent( - isAutomation: isAutomation, - sceneId: sceneId, - ), + )), + if (isAutomation) + DefaultContainer( + padding: const EdgeInsets.symmetric( + horizontal: 8, ), - const SizedBox( - height: 16, + 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, + ), + ], ), - ], - ), - ), + ), + ], ), - ], - ), - ), - ); + ); + })); } } diff --git a/lib/features/scene/view/scene_view.dart b/lib/features/scene/view/scene_view.dart index ce297ce..a2d1881 100644 --- a/lib/features/scene/view/scene_view.dart +++ b/lib/features/scene/view/scene_view.dart @@ -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( builder: (context, state) { if (state is DeleteSceneSuccess) { if (state.success) { - BlocProvider.of(context) - .add(LoadScenes(HomeCubit.getInstance().selectedSpace!.id!)); BlocProvider.of(context).add( - LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!)); + LoadScenes(HomeCubit.getInstance().selectedSpace!.id!, showInDevice: pageType)); + BlocProvider.of(context) + .add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!)); } } if (state is CreateSceneWithTasks) { if (state.success == true) { - BlocProvider.of(context) - .add(LoadScenes(HomeCubit.getInstance().selectedSpace!.id!)); BlocProvider.of(context).add( - LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!)); - context - .read() - .add(const SmartSceneClearEvent()); + LoadScenes(HomeCubit.getInstance().selectedSpace!.id!, showInDevice: pageType)); + BlocProvider.of(context) + .add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!)); + context.read().add(const SmartSceneClearEvent()); } } return BlocListener( listener: (context, state) { if (state is SceneTriggerSuccess) { context.showCustomSnackbar( - message: - 'Scene ${state.sceneName} triggered successfully!'); + message: 'Scene ${state.sceneName} triggered successfully!'); } }, child: HomeCubit.getInstance().spaces?.isEmpty ?? true @@ -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( diff --git a/lib/features/scene/widgets/alert_dialogs/icons_dialog.dart b/lib/features/scene/widgets/alert_dialogs/icons_dialog.dart new file mode 100644 index 0000000..88e0bf4 --- /dev/null +++ b/lib/features/scene/widgets/alert_dialogs/icons_dialog.dart @@ -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: [ + 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), + ), + ), + )), + )) + ], + ) + ], + ), + ); + } +} diff --git a/lib/features/scene/widgets/scene_view_widget/scene_item.dart b/lib/features/scene/widgets/scene_view_widget/scene_item.dart index 53c1c1d..78f4200 100644 --- a/lib/features/scene/widgets/scene_view_widget/scene_item.dart +++ b/lib/features/scene/widgets/scene_view_widget/scene_item.dart @@ -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().add(const SmartSceneClearEvent()); if (disablePlayButton == false) { - BlocProvider.of(context).add( - FetchSceneTasksEvent(sceneId: scene.id, isAutomation: false)); + BlocProvider.of(context) + .add(FetchSceneTasksEvent(sceneId: scene.id, isAutomation: false)); /// the state to set the scene type must be after the fetch BlocProvider.of(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() - .add(SceneTrigger(scene.id, scene.name)); + context.read().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().add( - UpdateAutomationStatus( - automationStatusUpdate: - AutomationStatusUpdate( - isEnable: value, - unitUuid: HomeCubit.getInstance() - .selectedSpace! - .id!), - automationId: scene.id)); + context.read().add(UpdateAutomationStatus( + automationStatusUpdate: AutomationStatusUpdate( + isEnable: value, + unitUuid: HomeCubit.getInstance().selectedSpace!.id!), + automationId: scene.id)); }, ), ], diff --git a/lib/generated/assets.dart b/lib/generated/assets.dart index 2d7e20a..1a2ecf7 100644 --- a/lib/generated/assets.dart +++ b/lib/generated/assets.dart @@ -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 } diff --git a/lib/services/api/api_links_endpoints.dart b/lib/services/api/api_links_endpoints.dart index 422d312..dfdb653 100644 --- a/lib/services/api/api_links_endpoints.dart +++ b/lib/services/api/api_links_endpoints.dart @@ -128,6 +128,7 @@ abstract class ApiEndpoints { static const String getUnitScenes = '/scene/tap-to-run/{unitUuid}'; static const String getScene = '/scene/tap-to-run/details/{sceneId}'; + static const String getIconScene = '/scene/icon'; static const String getUnitAutomation = '/automation/{unitUuid}'; diff --git a/lib/services/api/scene_api.dart b/lib/services/api/scene_api.dart index e26920c..6e0d981 100644 --- a/lib/services/api/scene_api.dart +++ b/lib/services/api/scene_api.dart @@ -1,5 +1,6 @@ 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'; @@ -10,8 +11,7 @@ class SceneApi { static final HTTPService _httpService = HTTPService(); //create scene - static Future> createScene( - CreateSceneModel createSceneModel) async { + static Future> createScene(CreateSceneModel createSceneModel) async { try { final response = await _httpService.post( path: ApiEndpoints.createScene, @@ -47,10 +47,11 @@ class SceneApi { //get scene by unit id - static Future> getScenesByUnitId(String unitId) async { + static Future> 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 scenes = []; @@ -101,12 +102,10 @@ class SceneApi { } //automation details - static Future getAutomationDetails( - String automationId) async { + static Future 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), ); @@ -117,12 +116,11 @@ class SceneApi { } //updateAutomationStatus - static Future updateAutomationStatus(String automationId, - AutomationStatusUpdate createAutomationEnable) async { + static Future 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'], ); @@ -132,8 +130,6 @@ class SceneApi { } } - //getScene - static Future getSceneDetails(String sceneId) async { try { final response = await _httpService.get( @@ -147,13 +143,27 @@ class SceneApi { } } + static Future> getIcon() async { + final response = await _httpService.get( + path: ApiEndpoints.getIconScene, + showServerMessage: false, + expectedResponseModel: (json) { + List iconsList = []; + json.forEach((element) { + iconsList.add(IconModel.fromJson(element)); + }); + return iconsList; + }, + ); + return response; + } + //update Scene static updateScene(CreateSceneModel createSceneModel, String sceneId) async { 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; }, @@ -165,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; }, @@ -185,8 +192,7 @@ class SceneApi { //delete Scene - static Future deleteScene( - {required String unitUuid, required String sceneId}) async { + static Future deleteScene({required String unitUuid, required String sceneId}) async { try { final response = await _httpService.delete( path: ApiEndpoints.deleteScene diff --git a/pubspec.yaml b/pubspec.yaml index a7270f2..a79ba67 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ description: This is the mobile application project, developed with Flutter for # pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: "none" # Remove this line if you wish to publish to pub.dev -version: 1.0.5+31 +version: 1.0.5+34 environment: sdk: ">=3.0.6 <4.0.0"