diff --git a/assets/icons/close_curtain.svg b/assets/icons/close_curtain.svg
new file mode 100644
index 00000000..53f9e03b
--- /dev/null
+++ b/assets/icons/close_curtain.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/open_curtain.svg b/assets/icons/open_curtain.svg
new file mode 100644
index 00000000..715773a5
--- /dev/null
+++ b/assets/icons/open_curtain.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/pause_curtain.svg b/assets/icons/pause_curtain.svg
new file mode 100644
index 00000000..8f90ea4f
--- /dev/null
+++ b/assets/icons/pause_curtain.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/reverse_arrows.svg b/assets/icons/reverse_arrows.svg
new file mode 100644
index 00000000..fe119c39
--- /dev/null
+++ b/assets/icons/reverse_arrows.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/images/completed_done.svg b/assets/images/completed_done.svg
new file mode 100644
index 00000000..759f0cba
--- /dev/null
+++ b/assets/images/completed_done.svg
@@ -0,0 +1,4 @@
+
diff --git a/lib/pages/analytics/models/analytics_device.dart b/lib/pages/analytics/models/analytics_device.dart
index 869de23f..6571eae4 100644
--- a/lib/pages/analytics/models/analytics_device.dart
+++ b/lib/pages/analytics/models/analytics_device.dart
@@ -39,8 +39,12 @@ class AnalyticsDevice {
? ProductDevice.fromJson(json['productDevice'] as Map)
: null,
spaceUuid: json['spaceUuid'] as String?,
- latitude: json['lat'] != null ? double.parse(json['lat'] as String? ?? '0.0') : null,
- longitude: json['lon'] != null ? double.parse(json['lon'] as String? ?? '0.0') : null,
+ latitude: json['lat'] != null && json['lat'] != ''
+ ? double.tryParse(json['lat']?.toString() ?? '0.0')
+ : null,
+ longitude: json['lon'] != null && json['lon'] != ''
+ ? double.tryParse(json['lon']?.toString() ?? '0.0')
+ : null,
);
}
}
diff --git a/lib/pages/analytics/modules/air_quality/blocs/air_quality_distribution/air_quality_distribution_bloc.dart b/lib/pages/analytics/modules/air_quality/blocs/air_quality_distribution/air_quality_distribution_bloc.dart
index 40d51d2b..455dff23 100644
--- a/lib/pages/analytics/modules/air_quality/blocs/air_quality_distribution/air_quality_distribution_bloc.dart
+++ b/lib/pages/analytics/modules/air_quality/blocs/air_quality_distribution/air_quality_distribution_bloc.dart
@@ -46,11 +46,11 @@ class AirQualityDistributionBloc
}
}
- Future _onClearAirQualityDistribution(
+ void _onClearAirQualityDistribution(
ClearAirQualityDistribution event,
Emitter emit,
- ) async {
- emit(const AirQualityDistributionState());
+ ) {
+ emit(AirQualityDistributionState(selectedAqiType: state.selectedAqiType));
}
void _onUpdateAqiTypeEvent(
diff --git a/lib/pages/analytics/modules/air_quality/blocs/range_of_aqi/range_of_aqi_bloc.dart b/lib/pages/analytics/modules/air_quality/blocs/range_of_aqi/range_of_aqi_bloc.dart
index 88c3715e..326a87a2 100644
--- a/lib/pages/analytics/modules/air_quality/blocs/range_of_aqi/range_of_aqi_bloc.dart
+++ b/lib/pages/analytics/modules/air_quality/blocs/range_of_aqi/range_of_aqi_bloc.dart
@@ -75,6 +75,6 @@ class RangeOfAqiBloc extends Bloc {
ClearRangeOfAqiEvent event,
Emitter emit,
) {
- emit(const RangeOfAqiState());
+ emit(RangeOfAqiState(selectedAqiType: state.selectedAqiType));
}
}
diff --git a/lib/pages/analytics/modules/air_quality/widgets/aqi_distribution_chart_title.dart b/lib/pages/analytics/modules/air_quality/widgets/aqi_distribution_chart_title.dart
index f7be6ee3..7b6b113a 100644
--- a/lib/pages/analytics/modules/air_quality/widgets/aqi_distribution_chart_title.dart
+++ b/lib/pages/analytics/modules/air_quality/widgets/aqi_distribution_chart_title.dart
@@ -34,6 +34,7 @@ class AqiDistributionChartTitle extends StatelessWidget {
alignment: AlignmentDirectional.centerEnd,
fit: BoxFit.scaleDown,
child: AqiTypeDropdown(
+ selectedAqiType: context.watch().state.selectedAqiType,
onChanged: (value) {
if (value != null) {
final bloc = context.read();
diff --git a/lib/pages/analytics/modules/air_quality/widgets/aqi_type_dropdown.dart b/lib/pages/analytics/modules/air_quality/widgets/aqi_type_dropdown.dart
index 6640c717..8233fe5a 100644
--- a/lib/pages/analytics/modules/air_quality/widgets/aqi_type_dropdown.dart
+++ b/lib/pages/analytics/modules/air_quality/widgets/aqi_type_dropdown.dart
@@ -18,19 +18,20 @@ enum AqiType {
}
class AqiTypeDropdown extends StatefulWidget {
- const AqiTypeDropdown({super.key, required this.onChanged});
+ const AqiTypeDropdown({
+ required this.onChanged,
+ this.selectedAqiType,
+ super.key,
+ });
final ValueChanged onChanged;
+ final AqiType? selectedAqiType;
@override
State createState() => _AqiTypeDropdownState();
}
class _AqiTypeDropdownState extends State {
- AqiType? _selectedItem = AqiType.aqi;
-
- void _updateSelectedItem(AqiType? item) => setState(() => _selectedItem = item);
-
@override
Widget build(BuildContext context) {
return Container(
@@ -41,8 +42,8 @@ class _AqiTypeDropdownState extends State {
width: 1,
),
),
- child: DropdownButton(
- value: _selectedItem,
+ child: DropdownButton(
+ value: widget.selectedAqiType,
isDense: true,
borderRadius: BorderRadius.circular(16),
dropdownColor: ColorsManager.whiteColors,
@@ -59,10 +60,7 @@ class _AqiTypeDropdownState extends State {
items: AqiType.values
.map((e) => DropdownMenuItem(value: e, child: Text(e.value)))
.toList(),
- onChanged: (value) {
- _updateSelectedItem(value);
- widget.onChanged(value);
- },
+ onChanged: widget.onChanged,
),
);
}
diff --git a/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart_title.dart b/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart_title.dart
index 1b0da288..421fbb13 100644
--- a/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart_title.dart
+++ b/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart_title.dart
@@ -63,15 +63,15 @@ class RangeOfAqiChartTitle extends StatelessWidget {
fit: BoxFit.scaleDown,
alignment: AlignmentDirectional.centerEnd,
child: AqiTypeDropdown(
+ selectedAqiType: context.watch().state.selectedAqiType,
onChanged: (value) {
final spaceTreeState = context.read().state;
final spaceUuid = spaceTreeState.selectedSpaces.firstOrNull;
-
- if (spaceUuid == null) return;
-
if (value != null) {
context.read().add(UpdateAqiTypeEvent(value));
}
+
+ if (spaceUuid == null) return;
},
),
),
diff --git a/lib/pages/device_managment/ac/bloc/ac_bloc.dart b/lib/pages/device_managment/ac/bloc/ac_bloc.dart
index 2ac26b41..85e119f1 100644
--- a/lib/pages/device_managment/ac/bloc/ac_bloc.dart
+++ b/lib/pages/device_managment/ac/bloc/ac_bloc.dart
@@ -84,9 +84,14 @@ class AcBloc extends Bloc {
statusList.add(Status(code: element['code'], value: element['value']));
});
+
+ deviceStatus =
+ AcStatusModel.fromJson(usersMap['productUuid'], statusList);
+
deviceStatus = AcStatusModel.fromJson(usersMap['productUuid'], statusList);
print('Device status updated: ${deviceStatus.acSwitch}');
+
if (!isClosed) {
add(AcStatusUpdated(deviceStatus));
}
diff --git a/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_bloc.dart b/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_bloc.dart
index 98b0c195..2c42caa6 100644
--- a/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_bloc.dart
+++ b/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_bloc.dart
@@ -16,11 +16,12 @@ class DeviceManagementBloc
int _onlineCount = 0;
int _offlineCount = 0;
int _lowBatteryCount = 0;
- List _selectedDevices = [];
+ final List _selectedDevices = [];
List _filteredDevices = [];
String currentProductName = '';
String? currentCommunity;
String? currentUnitName;
+ String subSpaceName = '';
DeviceManagementBloc() : super(DeviceManagementInitial()) {
on(_onFetchDevices);
@@ -31,25 +32,26 @@ class DeviceManagementBloc
on(_onResetFilters);
on(_onResetSelectedDevices);
on(_onUpdateSelection);
+ on(_onUpdateDeviceName);
+ on(_onUpdateSubSpaceName);
}
Future _onFetchDevices(
FetchDevices event, Emitter emit) async {
emit(DeviceManagementLoading());
try {
- List devices = [];
+ var devices = [];
_devices.clear();
- var spaceBloc = event.context.read();
+ final spaceBloc = event.context.read();
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
if (spaceBloc.state.selectedCommunities.isEmpty) {
- devices =
- await DevicesManagementApi().fetchDevices('', '', projectUuid);
+ devices = await DevicesManagementApi().fetchDevices('', '', projectUuid);
} else {
- for (var community in spaceBloc.state.selectedCommunities) {
- List spacesList =
+ for (final community in spaceBloc.state.selectedCommunities) {
+ final spacesList =
spaceBloc.state.selectedCommunityAndSpaces[community] ?? [];
- for (var space in spacesList) {
+ for (final space in spacesList) {
devices.addAll(await DevicesManagementApi()
.fetchDevices(community, space, projectUuid));
}
@@ -74,7 +76,7 @@ class DeviceManagementBloc
}
}
- void _onFilterDevices(
+ Future _onFilterDevices(
FilterDevices event, Emitter emit) async {
if (_devices.isNotEmpty) {
_filteredDevices = List.from(_devices.where((device) {
@@ -156,8 +158,7 @@ class DeviceManagementBloc
add(FilterDevices(_getFilterFromIndex(_selectedIndex)));
}
- void _onSelectDevice(
- SelectDevice event, Emitter emit) {
+ void _onSelectDevice(SelectDevice event, Emitter emit) {
final selectedUuid = event.selectedDevice.uuid;
if (_selectedDevices.any((device) => device.uuid == selectedUuid)) {
@@ -166,9 +167,9 @@ class DeviceManagementBloc
_selectedDevices.add(event.selectedDevice);
}
- List clonedSelectedDevices = List.from(_selectedDevices);
+ final clonedSelectedDevices = List.from(_selectedDevices);
- bool isControlButtonEnabled =
+ final isControlButtonEnabled =
_checkIfControlButtonEnabled(clonedSelectedDevices);
if (state is DeviceManagementLoaded) {
@@ -198,8 +199,8 @@ class DeviceManagementBloc
void _onUpdateSelection(
UpdateSelection event, Emitter emit) {
- List selectedDevices = [];
- List devicesToSelectFrom = [];
+ final selectedDevices = [];
+ var devicesToSelectFrom = [];
if (state is DeviceManagementLoaded) {
devicesToSelectFrom = (state as DeviceManagementLoaded).devices;
@@ -207,7 +208,7 @@ class DeviceManagementBloc
devicesToSelectFrom = (state as DeviceManagementFiltered).filteredDevices;
}
- for (int i = 0; i < event.selectedRows.length; i++) {
+ for (var i = 0; i < event.selectedRows.length; i++) {
if (event.selectedRows[i]) {
selectedDevices.add(devicesToSelectFrom[i]);
}
@@ -253,8 +254,7 @@ class DeviceManagementBloc
_onlineCount = _devices.where((device) => device.online == true).length;
_offlineCount = _devices.where((device) => device.online == false).length;
_lowBatteryCount = _devices
- .where((device) =>
- device.batteryLevel != null && device.batteryLevel! < 20)
+ .where((device) => device.batteryLevel != null && device.batteryLevel! < 20)
.length;
}
@@ -270,8 +270,8 @@ class DeviceManagementBloc
return 'All';
}
}
- void _onSearchDevices(
- SearchDevices event, Emitter emit) {
+
+ void _onSearchDevices(SearchDevices event, Emitter emit) {
if ((event.community == null || event.community!.isEmpty) &&
(event.unitName == null || event.unitName!.isEmpty) &&
(event.deviceNameOrProductName == null ||
@@ -300,7 +300,7 @@ class DeviceManagementBloc
currentCommunity = event.community;
currentUnitName = event.unitName;
- List devicesToSearch = _devices;
+ final devicesToSearch = _devices;
if (devicesToSearch.isNotEmpty) {
final searchText = event.deviceNameOrProductName?.toLowerCase() ?? '';
@@ -343,5 +343,134 @@ class DeviceManagementBloc
}
}
+ void _onUpdateDeviceName(
+ UpdateDeviceName event, Emitter emit) {
+ final devices = _devices.map((device) {
+ if (device.uuid == event.deviceId) {
+ final modifiedDevice = device.copyWith(name: event.newName);
+ _selectedDevices.removeWhere((device) => device.uuid == event.deviceId);
+ _selectedDevices.add(modifiedDevice);
+ return modifiedDevice;
+ }
+ return device;
+ }).toList();
+
+ final filteredDevices = _filteredDevices.map((device) {
+ if (device.uuid == event.deviceId) {
+ final modifiedDevice = device.copyWith(name: event.newName);
+ _selectedDevices.removeWhere((device) => device.uuid == event.deviceId);
+ _selectedDevices.add(modifiedDevice);
+ return modifiedDevice;
+ }
+ return device;
+ }).toList();
+
+ _devices = devices;
+ _filteredDevices = filteredDevices;
+
+ if (state is DeviceManagementLoaded) {
+ final loaded = state as DeviceManagementLoaded;
+ final selectedDevices01 = _selectedDevices.map((device) {
+ if (device.uuid == event.deviceId) {
+ final modifiedDevice = device.copyWith(name: event.newName);
+ return modifiedDevice;
+ }
+ return device;
+ }).toList();
+ emit(DeviceManagementLoaded(
+ devices: devices,
+ selectedIndex: loaded.selectedIndex,
+ onlineCount: loaded.onlineCount,
+ offlineCount: loaded.offlineCount,
+ lowBatteryCount: loaded.lowBatteryCount,
+ selectedDevice: selectedDevices01,
+ isControlButtonEnabled: loaded.isControlButtonEnabled,
+ ));
+ } else if (state is DeviceManagementFiltered) {
+ final filtered = state as DeviceManagementFiltered;
+ final selectedDevices01 = filtered.selectedDevice?.map((device) {
+ if (device.uuid == event.deviceId) {
+ final modifiedDevice = device.copyWith(name: event.newName);
+ return modifiedDevice;
+ }
+ return device;
+ }).toList();
+ emit(DeviceManagementFiltered(
+ filteredDevices: filteredDevices,
+ selectedIndex: filtered.selectedIndex,
+ onlineCount: filtered.onlineCount,
+ offlineCount: filtered.offlineCount,
+ lowBatteryCount: filtered.lowBatteryCount,
+ selectedDevice: selectedDevices01,
+ isControlButtonEnabled: filtered.isControlButtonEnabled,
+ ));
+ }
+ }
+
+ void _onUpdateSubSpaceName(
+ UpdateSubSpaceName event, Emitter emit) {
+ final devices = _devices.map((device) {
+ if (device.uuid == event.deviceId) {
+ return device.copyWith(
+ subspace:
+ device.subspace?.copyWith(subspaceName: event.newSubSpaceName));
+ }
+ return device;
+ }).toList();
+
+ final filteredDevices = _filteredDevices.map((device) {
+ if (device.uuid == event.deviceId) {
+ return device.copyWith(
+ subspace:
+ device.subspace?.copyWith(subspaceName: event.newSubSpaceName));
+ }
+ return device;
+ }).toList();
+
+ _devices = devices;
+ _filteredDevices = filteredDevices;
+
+ if (state is DeviceManagementLoaded) {
+ final loaded = state as DeviceManagementLoaded;
+ final selectedDevices = loaded.selectedDevice?.map((device) {
+ if (device.uuid == event.deviceId) {
+ return device.copyWith(
+ subspace:
+ device.subspace?.copyWith(subspaceName: event.newSubSpaceName));
+ }
+ return device;
+ }).toList();
+ emit(DeviceManagementLoaded(
+ devices: _devices,
+ selectedIndex: loaded.selectedIndex,
+ onlineCount: loaded.onlineCount,
+ offlineCount: loaded.offlineCount,
+ lowBatteryCount: loaded.lowBatteryCount,
+ selectedDevice: selectedDevices,
+ isControlButtonEnabled: loaded.isControlButtonEnabled,
+ ));
+ } else if (state is DeviceManagementFiltered) {
+ // final filtered = state as DeviceManagementFiltered;
+ // emit(DeviceManagementFiltered(
+ // filteredDevices: _filteredDevices,
+ // selectedIndex: filtered.selectedIndex,
+ // onlineCount: filtered.onlineCount,
+ // offlineCount: filtered.offlineCount,
+ // lowBatteryCount: filtered.lowBatteryCount,
+ // selectedDevice: filtered.selectedDevice,
+ // isControlButtonEnabled: filtered.isControlButtonEnabled,
+ // ));
+ }
+ }
+
+ void changeSubspaceName(
+ String deviceId, String newSubSpaceName, String subspaceId) {
+ add(UpdateSubSpaceName(
+ deviceId: deviceId,
+ newSubSpaceName: newSubSpaceName,
+ subspaceId: subspaceId,
+ ));
+ }
+
List get selectedDevices => _selectedDevices;
}
diff --git a/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_event.dart b/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_event.dart
index 5292de0e..e3b3acac 100644
--- a/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_event.dart
+++ b/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_event.dart
@@ -70,3 +70,21 @@ class UpdateSelection extends DeviceManagementEvent {
const UpdateSelection(this.selectedRows);
}
+
+class UpdateDeviceName extends DeviceManagementEvent {
+ final String deviceId;
+ final String newName;
+
+ const UpdateDeviceName({required this.deviceId, required this.newName});
+}
+
+class UpdateSubSpaceName extends DeviceManagementEvent {
+ final String deviceId;
+ final String newSubSpaceName;
+ final String subspaceId;
+
+ const UpdateSubSpaceName(
+ {required this.deviceId,
+ required this.newSubSpaceName,
+ required this.subspaceId});
+}
diff --git a/lib/pages/device_managment/all_devices/helper/route_controls_based_code.dart b/lib/pages/device_managment/all_devices/helper/route_controls_based_code.dart
index 5586a310..08bca73c 100644
--- a/lib/pages/device_managment/all_devices/helper/route_controls_based_code.dart
+++ b/lib/pages/device_managment/all_devices/helper/route_controls_based_code.dart
@@ -7,6 +7,8 @@ import 'package:syncrow_web/pages/device_managment/ceiling_sensor/view/ceiling_s
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/view/ceiling_sensor_controls.dart';
import 'package:syncrow_web/pages/device_managment/curtain/view/curtain_batch_status_view.dart';
import 'package:syncrow_web/pages/device_managment/curtain/view/curtain_status_view.dart';
+import 'package:syncrow_web/pages/device_managment/curtain_module/view/curtain_module_batch.dart';
+import 'package:syncrow_web/pages/device_managment/curtain_module/view/curtain_module_items.dart';
import 'package:syncrow_web/pages/device_managment/door_lock/view/door_lock_batch_control_view.dart';
import 'package:syncrow_web/pages/device_managment/door_lock/view/door_lock_control_view.dart';
import 'package:syncrow_web/pages/device_managment/flush_mounted_presence_sensor/views/flush_mounted_presence_sensor_batch_control_view.dart';
@@ -18,6 +20,7 @@ import 'package:syncrow_web/pages/device_managment/gateway/view/gateway_view.dar
import 'package:syncrow_web/pages/device_managment/main_door_sensor/view/main_door_control_view.dart';
import 'package:syncrow_web/pages/device_managment/main_door_sensor/view/main_door_sensor_batch_view.dart';
import 'package:syncrow_web/pages/device_managment/one_g_glass_switch/view/one_gang_glass_batch_control_view.dart';
+import 'package:syncrow_web/pages/device_managment/one_g_glass_switch/view/one_gang_glass_switch_control_view.dart';
import 'package:syncrow_web/pages/device_managment/one_gang_switch/view/wall_light_batch_control.dart';
import 'package:syncrow_web/pages/device_managment/one_gang_switch/view/wall_light_device_control.dart';
import 'package:syncrow_web/pages/device_managment/power_clamp/view/power_clamp_batch_control_view.dart';
@@ -39,8 +42,6 @@ import 'package:syncrow_web/pages/device_managment/water_heater/view/water_heate
import 'package:syncrow_web/pages/device_managment/water_leak/view/water_leak_batch_control_view.dart';
import 'package:syncrow_web/pages/device_managment/water_leak/view/water_leak_control_view.dart';
-import '../../one_g_glass_switch/view/one_gang_glass_switch_control_view.dart';
-
mixin RouteControlsBasedCode {
Widget routeControlsWidgets({required AllDevicesModel device}) {
switch (device.productType) {
@@ -84,6 +85,10 @@ mixin RouteControlsBasedCode {
return CurtainStatusControlsView(
deviceId: device.uuid!,
);
+ case 'CUR_2':
+ return CurtainModuleItems(
+ deviceId: device.uuid!,
+ );
case 'AC':
return AcDeviceControlsView(device: device);
case 'WH':
@@ -107,7 +112,7 @@ mixin RouteControlsBasedCode {
case 'SOS':
return SosDeviceControlsView(device: device);
- case 'NCPS':
+ case 'NCPS':
return FlushMountedPresenceSensorControlView(device: device);
default:
return const SizedBox();
@@ -132,76 +137,140 @@ mixin RouteControlsBasedCode {
switch (devices.first.productType) {
case '1G':
return WallLightBatchControlView(
- deviceIds: devices.where((e) => (e.productType == '1G')).map((e) => e.uuid!).toList(),
+ deviceIds: devices
+ .where((e) => e.productType == '1G')
+ .map((e) => e.uuid!)
+ .toList(),
);
case '2G':
return TwoGangBatchControlView(
- deviceIds: devices.where((e) => (e.productType == '2G')).map((e) => e.uuid!).toList(),
+ deviceIds: devices
+ .where((e) => e.productType == '2G')
+ .map((e) => e.uuid!)
+ .toList(),
);
case '3G':
return LivingRoomBatchControlsView(
- deviceIds: devices.where((e) => (e.productType == '3G')).map((e) => e.uuid!).toList(),
+ deviceIds: devices
+ .where((e) => e.productType == '3G')
+ .map((e) => e.uuid!)
+ .toList(),
);
case '1GT':
return OneGangGlassSwitchBatchControlView(
- deviceIds: devices.where((e) => (e.productType == '1GT')).map((e) => e.uuid!).toList(),
+ deviceIds: devices
+ .where((e) => e.productType == '1GT')
+ .map((e) => e.uuid!)
+ .toList(),
);
case '2GT':
return TwoGangGlassSwitchBatchControlView(
- deviceIds: devices.where((e) => (e.productType == '2GT')).map((e) => e.uuid!).toList(),
+ deviceIds: devices
+ .where((e) => e.productType == '2GT')
+ .map((e) => e.uuid!)
+ .toList(),
);
case '3GT':
return ThreeGangGlassSwitchBatchControlView(
- deviceIds: devices.where((e) => (e.productType == '3GT')).map((e) => e.uuid!).toList(),
+ deviceIds: devices
+ .where((e) => e.productType == '3GT')
+ .map((e) => e.uuid!)
+ .toList(),
);
case 'GW':
return GatewayBatchControlView(
- gatewayIds: devices.where((e) => (e.productType == 'GW')).map((e) => e.uuid!).toList(),
+ gatewayIds: devices
+ .where((e) => e.productType == 'GW')
+ .map((e) => e.uuid!)
+ .toList(),
);
case 'DL':
return DoorLockBatchControlView(
- devicesIds: devices.where((e) => (e.productType == 'DL')).map((e) => e.uuid!).toList());
+ devicesIds: devices
+ .where((e) => e.productType == 'DL')
+ .map((e) => e.uuid!)
+ .toList());
case 'WPS':
return WallSensorBatchControlView(
- devicesIds: devices.where((e) => (e.productType == 'WPS')).map((e) => e.uuid!).toList());
+ devicesIds: devices
+ .where((e) => e.productType == 'WPS')
+ .map((e) => e.uuid!)
+ .toList());
case 'CPS':
return CeilingSensorBatchControlView(
- devicesIds: devices.where((e) => (e.productType == 'CPS')).map((e) => e.uuid!).toList(),
+ devicesIds: devices
+ .where((e) => e.productType == 'CPS')
+ .map((e) => e.uuid!)
+ .toList(),
);
case 'CUR':
return CurtainBatchStatusView(
- devicesIds: devices.where((e) => (e.productType == 'CUR')).map((e) => e.uuid!).toList(),
+ devicesIds: devices
+ .where((e) => e.productType == 'CUR')
+ .map((e) => e.uuid!)
+ .toList(),
+ );
+ case 'CUR_2':
+ return CurtainModuleBatchView(
+ devicesIds: devices
+ .where((e) => e.productType == 'CUR_2')
+ .map((e) => e.uuid!)
+ .toList(),
);
case 'AC':
return AcDeviceBatchControlView(
- devicesIds: devices.where((e) => (e.productType == 'AC')).map((e) => e.uuid!).toList());
+ devicesIds: devices
+ .where((e) => e.productType == 'AC')
+ .map((e) => e.uuid!)
+ .toList());
case 'WH':
return WaterHEaterBatchControlView(
- deviceIds: devices.where((e) => (e.productType == 'WH')).map((e) => e.uuid!).toList(),
+ deviceIds: devices
+ .where((e) => e.productType == 'WH')
+ .map((e) => e.uuid!)
+ .toList(),
);
case 'DS':
return MainDoorSensorBatchView(
- devicesIds: devices.where((e) => (e.productType == 'DS')).map((e) => e.uuid!).toList(),
+ devicesIds: devices
+ .where((e) => e.productType == 'DS')
+ .map((e) => e.uuid!)
+ .toList(),
);
case 'GD':
return GarageDoorBatchControlView(
- deviceIds: devices.where((e) => (e.productType == 'GD')).map((e) => e.uuid!).toList(),
+ deviceIds: devices
+ .where((e) => e.productType == 'GD')
+ .map((e) => e.uuid!)
+ .toList(),
);
case 'WL':
return WaterLeakBatchControlView(
- deviceIds: devices.where((e) => (e.productType == 'WL')).map((e) => e.uuid!).toList(),
+ deviceIds: devices
+ .where((e) => e.productType == 'WL')
+ .map((e) => e.uuid!)
+ .toList(),
);
case 'PC':
return PowerClampBatchControlView(
- deviceIds: devices.where((e) => (e.productType == 'PC')).map((e) => e.uuid!).toList(),
+ deviceIds: devices
+ .where((e) => e.productType == 'PC')
+ .map((e) => e.uuid!)
+ .toList(),
);
case 'SOS':
return SOSBatchControlView(
- deviceIds: devices.where((e) => (e.productType == 'SOS')).map((e) => e.uuid!).toList(),
+ deviceIds: devices
+ .where((e) => e.productType == 'SOS')
+ .map((e) => e.uuid!)
+ .toList(),
);
case 'NCPS':
return FlushMountedPresenceSensorBatchControlView(
- devicesIds: devices.where((e) => (e.productType == 'NCPS')).map((e) => e.uuid!).toList(),
+ devicesIds: devices
+ .where((e) => e.productType == 'NCPS')
+ .map((e) => e.uuid!)
+ .toList(),
);
default:
return const SizedBox();
diff --git a/lib/pages/device_managment/all_devices/models/device_status.dart b/lib/pages/device_managment/all_devices/models/device_status.dart
index b78f2a30..f4efe36b 100644
--- a/lib/pages/device_managment/all_devices/models/device_status.dart
+++ b/lib/pages/device_managment/all_devices/models/device_status.dart
@@ -57,6 +57,16 @@ class Status {
};
}
+ Status copyWith({
+ String? code,
+ dynamic value,
+ }) {
+ return Status(
+ code: code ?? this.code,
+ value: value ?? this.value,
+ );
+ }
+
factory Status.fromJson(String source) => Status.fromMap(json.decode(source));
String toJson() => json.encode(toMap());
diff --git a/lib/pages/device_managment/all_devices/models/device_subspace.model.dart b/lib/pages/device_managment/all_devices/models/device_subspace.model.dart
index dc2386de..5d5f44bf 100644
--- a/lib/pages/device_managment/all_devices/models/device_subspace.model.dart
+++ b/lib/pages/device_managment/all_devices/models/device_subspace.model.dart
@@ -44,4 +44,20 @@ class DeviceSubspace {
static List