diff --git a/assets/icons/sos.svg b/assets/icons/sos.svg
new file mode 100644
index 00000000..887e9f19
--- /dev/null
+++ b/assets/icons/sos.svg
@@ -0,0 +1,23 @@
+
diff --git a/assets/icons/sos_normal.svg b/assets/icons/sos_normal.svg
new file mode 100644
index 00000000..ea795024
--- /dev/null
+++ b/assets/icons/sos_normal.svg
@@ -0,0 +1,23 @@
+
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 8edb0a1e..e38ac582 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
@@ -20,6 +20,8 @@ import 'package:syncrow_web/pages/device_managment/one_gang_switch/view/wall_lig
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';
import 'package:syncrow_web/pages/device_managment/power_clamp/view/smart_power_device_control.dart';
+import 'package:syncrow_web/pages/device_managment/sos/view/sos_batch_control_view.dart';
+import 'package:syncrow_web/pages/device_managment/sos/view/sos_device_control_view.dart';
import 'package:syncrow_web/pages/device_managment/three_g_glass_switch/view/three_gang_glass_switch_batch_control_view.dart';
import 'package:syncrow_web/pages/device_managment/three_g_glass_switch/view/three_gang_glass_switch_control_view.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/view/living_room_batch_controls.dart';
@@ -100,6 +102,8 @@ mixin RouteControlsBasedCode {
return SmartPowerDeviceControl(
deviceId: device.uuid!,
);
+ case 'SOS':
+ return SosDeviceControlsView(device: device);
default:
return const SizedBox();
}
@@ -123,119 +127,72 @@ 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 '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(),
);
default:
return const SizedBox();
diff --git a/lib/pages/device_managment/garage_door/view/garage_door_control_view.dart b/lib/pages/device_managment/garage_door/view/garage_door_control_view.dart
index e3c44405..886ca9ae 100644
--- a/lib/pages/device_managment/garage_door/view/garage_door_control_view.dart
+++ b/lib/pages/device_managment/garage_door/view/garage_door_control_view.dart
@@ -6,6 +6,7 @@ import 'package:syncrow_web/pages/device_managment/garage_door/bloc/garage_door_
import 'package:syncrow_web/pages/device_managment/garage_door/helper/garage_door_helper.dart';
import 'package:syncrow_web/pages/device_managment/garage_door/models/garage_door_model.dart';
import 'package:syncrow_web/pages/device_managment/garage_door/widgets/schedule_garage_view.dart';
+import 'package:syncrow_web/pages/device_managment/shared/icon_name_status_container.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/report_table.dart';
import 'package:syncrow_web/pages/device_managment/shared/toggle_widget.dart';
import 'package:syncrow_web/utils/color_manager.dart';
@@ -13,10 +14,7 @@ import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
-import '../../main_door_sensor/view/main_door_control_view.dart';
-
-class GarageDoorControlView extends StatelessWidget
- with HelperResponsiveLayout {
+class GarageDoorControlView extends StatelessWidget with HelperResponsiveLayout {
final String deviceId;
const GarageDoorControlView({required this.deviceId, super.key});
@@ -24,8 +22,7 @@ class GarageDoorControlView extends StatelessWidget
@override
Widget build(BuildContext context) {
return BlocProvider(
- create: (context) => GarageDoorBloc(deviceId: deviceId)
- ..add(GarageDoorInitialEvent(deviceId)),
+ create: (context) => GarageDoorBloc(deviceId: deviceId)..add(GarageDoorInitialEvent(deviceId)),
child: BlocBuilder(
builder: (context, state) {
if (state is GarageDoorLoadingState) {
@@ -37,9 +34,7 @@ class GarageDoorControlView extends StatelessWidget
garageDoorSensor: true,
onRowTap: (index) {},
onClose: () {
- context
- .read()
- .add(BackToGarageDoorGridViewEvent());
+ context.read().add(BackToGarageDoorGridViewEvent());
},
);
} else if (state is GarageDoorLoadedState) {
@@ -80,10 +75,7 @@ class GarageDoorControlView extends StatelessWidget
icon: status.switch1 ? Assets.openedDoor : Assets.closedDoor,
onTap: () {
context.read().add(
- GarageDoorControlEvent(
- deviceId: status.uuid,
- value: !status.switch1,
- code: 'switch_1'),
+ GarageDoorControlEvent(deviceId: status.uuid, value: !status.switch1, code: 'switch_1'),
);
},
status: status.switch1,
@@ -92,8 +84,7 @@ class GarageDoorControlView extends StatelessWidget
IconNameStatusContainer(
onTap: () {
context.read().add(
- FetchGarageDoorSchedulesEvent(
- deviceId: deviceId, category: 'switch_1'),
+ FetchGarageDoorSchedulesEvent(deviceId: deviceId, category: 'switch_1'),
);
showDialog(
context: context,
@@ -116,9 +107,7 @@ class GarageDoorControlView extends StatelessWidget
children: [
IconButton(
onPressed: () {
- context
- .read()
- .add(DecreaseGarageDoorDelayEvent(deviceId: status.uuid));
+ context.read().add(DecreaseGarageDoorDelayEvent(deviceId: status.uuid));
},
icon: const Icon(
Icons.remove,
@@ -136,8 +125,7 @@ class GarageDoorControlView extends StatelessWidget
),
Text(
'h',
- style: context.textTheme.bodySmall!
- .copyWith(color: ColorsManager.blackColor),
+ style: context.textTheme.bodySmall!.copyWith(color: ColorsManager.blackColor),
),
Text(
(status.delay.inMinutes % 60).toString().padLeft(2, '0'),
@@ -148,14 +136,11 @@ class GarageDoorControlView extends StatelessWidget
),
Text(
'm',
- style: context.textTheme.bodySmall!
- .copyWith(color: ColorsManager.blackColor),
+ style: context.textTheme.bodySmall!.copyWith(color: ColorsManager.blackColor),
),
IconButton(
onPressed: () {
- context
- .read()
- .add(IncreaseGarageDoorDelayEvent(deviceId: status.uuid));
+ context.read().add(IncreaseGarageDoorDelayEvent(deviceId: status.uuid));
},
icon: const Icon(
Icons.add,
@@ -173,9 +158,7 @@ class GarageDoorControlView extends StatelessWidget
onChange: (value) {
context.read().add(
GarageDoorControlEvent(
- deviceId: status.uuid,
- value: value ? status.delay.inSeconds : 0,
- code: 'countdown_1'),
+ deviceId: status.uuid, value: value ? status.delay.inSeconds : 0, code: 'countdown_1'),
);
},
),
@@ -184,8 +167,7 @@ class GarageDoorControlView extends StatelessWidget
name: 'Records',
icon: Assets.records,
onTap: () {
- context.read().add(FetchGarageDoorRecordsEvent(
- code: 'switch_1', deviceId: status.uuid));
+ context.read().add(FetchGarageDoorRecordsEvent(code: 'switch_1', deviceId: status.uuid));
},
status: false,
textColor: ColorsManager.blackColor,
diff --git a/lib/pages/device_managment/main_door_sensor/view/main_door_control_view.dart b/lib/pages/device_managment/main_door_sensor/view/main_door_control_view.dart
index fe03c74a..ecdb367a 100644
--- a/lib/pages/device_managment/main_door_sensor/view/main_door_control_view.dart
+++ b/lib/pages/device_managment/main_door_sensor/view/main_door_control_view.dart
@@ -1,17 +1,15 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
-import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart';
import 'package:syncrow_web/pages/device_managment/main_door_sensor/bloc/main_door_sensor_bloc.dart';
import 'package:syncrow_web/pages/device_managment/main_door_sensor/bloc/main_door_sensor_event.dart';
import 'package:syncrow_web/pages/device_managment/main_door_sensor/bloc/main_door_sensor_state.dart';
import 'package:syncrow_web/pages/device_managment/main_door_sensor/models/main_door_status_model.dart';
import 'package:syncrow_web/pages/device_managment/main_door_sensor/widgets/notification_dialog.dart';
-import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
+import 'package:syncrow_web/pages/device_managment/shared/icon_name_status_container.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/report_table.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
-import 'package:syncrow_web/utils/extension/build_context_x.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
class MainDoorSensorControlView extends StatelessWidget with HelperResponsiveLayout {
@@ -113,71 +111,3 @@ class MainDoorSensorControlView extends StatelessWidget with HelperResponsiveLay
);
}
}
-
-class IconNameStatusContainer extends StatelessWidget {
- const IconNameStatusContainer({
- super.key,
- required this.name,
- required this.icon,
- required this.onTap,
- required this.status,
- required this.textColor,
- this.paddingAmount = 12,
- required this.isFullIcon,
- });
-
- final String name;
- final String icon;
- final GestureTapCallback onTap;
- final bool status;
- final Color textColor;
- final double? paddingAmount;
- final bool isFullIcon;
-
- @override
- Widget build(BuildContext context) {
- return GestureDetector(
- onTap: onTap,
- child: DeviceControlsContainer(
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- if (isFullIcon)
- ClipOval(
- child: SvgPicture.asset(
- icon,
- fit: BoxFit.contain,
- ),
- )
- else
- ClipOval(
- child: Container(
- height: 60,
- width: 60,
- padding: EdgeInsets.all(paddingAmount ?? 8),
- color: ColorsManager.whiteColors,
- child: SvgPicture.asset(
- icon,
- width: 35,
- height: 35,
- fit: BoxFit.contain,
- ),
- )),
- const Spacer(),
- Padding(
- padding: const EdgeInsets.symmetric(horizontal: 6),
- child: Text(
- name,
- textAlign: TextAlign.start,
- style: context.textTheme.titleMedium!.copyWith(
- fontWeight: FontWeight.w400,
- color: textColor,
- ),
- ),
- ),
- ],
- ),
- ),
- );
- }
-}
diff --git a/lib/pages/device_managment/shared/device_batch_control_dialog.dart b/lib/pages/device_managment/shared/device_batch_control_dialog.dart
index d11b1701..f2dc68f5 100644
--- a/lib/pages/device_managment/shared/device_batch_control_dialog.dart
+++ b/lib/pages/device_managment/shared/device_batch_control_dialog.dart
@@ -1,14 +1,10 @@
-import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
-
-import 'package:syncrow_web/utils/extension/build_context_x.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/helper/route_controls_based_code.dart';
-
import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart';
import 'package:syncrow_web/utils/color_manager.dart';
+import 'package:syncrow_web/utils/extension/build_context_x.dart';
-class DeviceBatchControlDialog extends StatelessWidget
- with RouteControlsBasedCode {
+class DeviceBatchControlDialog extends StatelessWidget with RouteControlsBasedCode {
final List devices;
const DeviceBatchControlDialog({super.key, required this.devices});
@@ -139,6 +135,8 @@ String getBatchDialogName(AllDevicesModel device) {
return "Garage Door Opener";
case 'WL':
return "Water Leak Sensor";
+ case 'SOS':
+ return "SOS";
default:
return device.categoryName ?? 'Device Control';
}
diff --git a/lib/pages/device_managment/shared/icon_name_status_container.dart b/lib/pages/device_managment/shared/icon_name_status_container.dart
new file mode 100644
index 00000000..13b6b594
--- /dev/null
+++ b/lib/pages/device_managment/shared/icon_name_status_container.dart
@@ -0,0 +1,73 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
+import 'package:syncrow_web/utils/color_manager.dart';
+import 'package:syncrow_web/utils/extension/build_context_x.dart';
+
+class IconNameStatusContainer extends StatelessWidget {
+ const IconNameStatusContainer({
+ super.key,
+ required this.name,
+ required this.icon,
+ required this.onTap,
+ required this.status,
+ required this.textColor,
+ this.paddingAmount = 12,
+ required this.isFullIcon,
+ });
+
+ final String name;
+ final String icon;
+ final GestureTapCallback onTap;
+ final bool status;
+ final Color textColor;
+ final double? paddingAmount;
+ final bool isFullIcon;
+
+ @override
+ Widget build(BuildContext context) {
+ return GestureDetector(
+ onTap: onTap,
+ child: DeviceControlsContainer(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ if (isFullIcon)
+ ClipOval(
+ child: SvgPicture.asset(
+ icon,
+ fit: BoxFit.contain,
+ ),
+ )
+ else
+ ClipOval(
+ child: Container(
+ height: 60,
+ width: 60,
+ padding: EdgeInsets.all(paddingAmount ?? 8),
+ color: ColorsManager.whiteColors,
+ child: SvgPicture.asset(
+ icon,
+ width: 35,
+ height: 35,
+ fit: BoxFit.contain,
+ ),
+ )),
+ const Spacer(),
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 6),
+ child: Text(
+ name,
+ textAlign: TextAlign.start,
+ style: context.textTheme.titleMedium!.copyWith(
+ fontWeight: FontWeight.w400,
+ color: textColor,
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/pages/device_managment/sos/bloc/sos_device_bloc.dart b/lib/pages/device_managment/sos/bloc/sos_device_bloc.dart
new file mode 100644
index 00000000..14fdf61c
--- /dev/null
+++ b/lib/pages/device_managment/sos/bloc/sos_device_bloc.dart
@@ -0,0 +1,90 @@
+import 'dart:async';
+
+import 'package:bloc/bloc.dart';
+import 'package:equatable/equatable.dart';
+import 'package:syncrow_web/pages/device_managment/all_devices/models/device_reports.dart';
+import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart';
+import 'package:syncrow_web/pages/device_managment/sos/models/sos_status_model.dart';
+import 'package:syncrow_web/services/devices_mang_api.dart';
+
+part 'sos_device_event.dart';
+part 'sos_device_state.dart';
+
+class SosDeviceBloc extends Bloc {
+ SosDeviceBloc() : super(SosDeviceInitial()) {
+ on(_getDeviceStatus);
+ on(_getBatchStatus);
+ on(_getDeviceRecords);
+ on(_getDeviceAutomationRecords);
+ on(_backToSosStatusView);
+ on(_sosFactoryReset);
+ }
+
+ late SosStatusModel deviceStatus;
+
+ FutureOr _getDeviceStatus(GetDeviceStatus event, Emitter emit) async {
+ emit(SosDeviceLoadingState());
+ try {
+ final status = await DevicesManagementApi().getDeviceStatus(event.uuid);
+ deviceStatus = SosStatusModel.fromJson(event.uuid, status.status);
+ emit(SosDeviceLoadedState(deviceStatus));
+ } catch (e) {
+ emit(SosDeviceErrorState(e.toString()));
+ }
+ }
+
+ FutureOr _getBatchStatus(GetBatchStatus event, Emitter emit) async {
+ emit(SosDeviceLoadingState());
+ try {
+ final status = await DevicesManagementApi().getBatchStatus(event.uuids);
+ deviceStatus = SosStatusModel.fromJson(event.uuids.first, status.status);
+ emit(SosDeviceLoadedState(deviceStatus));
+ } catch (e) {
+ emit(SosDeviceErrorState(e.toString()));
+ }
+ }
+
+ FutureOr _getDeviceRecords(GetDeviceRecords event, Emitter emit) async {
+ emit(SosReportLoadingState());
+ try {
+ final from = DateTime.now().subtract(const Duration(days: 30)).millisecondsSinceEpoch;
+ final to = DateTime.now().millisecondsSinceEpoch;
+ final DeviceReport records =
+ await DevicesManagementApi.getDeviceReportsByDate(event.uuid, 'sos', from.toString(), to.toString());
+ emit(SosReportLoadedState(records));
+ } catch (e) {
+ emit(SosReportErrorState(e.toString()));
+ }
+ }
+
+ FutureOr _getDeviceAutomationRecords(GetDeviceAutomationRecords event, Emitter emit) async {
+ emit(SosAutomationReportLoadingState());
+ try {
+ final from = DateTime.now().subtract(const Duration(days: 30)).millisecondsSinceEpoch;
+ final to = DateTime.now().millisecondsSinceEpoch;
+ final DeviceReport records = await DevicesManagementApi.getDeviceReportsByDate(
+ event.uuid, 'sos_automation', from.toString(), to.toString());
+ emit(SosAutomationReportLoadedState(records));
+ } catch (e) {
+ emit(SosAutomationReportErrorState(e.toString()));
+ }
+ }
+
+ FutureOr _backToSosStatusView(BackToSosStatusView event, Emitter emit) {
+ emit(SosDeviceLoadedState(deviceStatus));
+ }
+
+ FutureOr _sosFactoryReset(SosFactoryReset event, Emitter emit) async {
+ emit(SosDeviceLoadingState());
+ try {
+ final response = await DevicesManagementApi().factoryReset(event.factoryReset, event.deviceId);
+ if (response) {
+ emit(SosDeviceLoadedState(deviceStatus));
+ } else {
+ emit(const SosDeviceErrorState('Factory reset failed'));
+ }
+ } catch (e) {
+ emit(SosDeviceErrorState(e.toString()));
+ }
+ }
+}
diff --git a/lib/pages/device_managment/sos/bloc/sos_device_event.dart b/lib/pages/device_managment/sos/bloc/sos_device_event.dart
new file mode 100644
index 00000000..270360b8
--- /dev/null
+++ b/lib/pages/device_managment/sos/bloc/sos_device_event.dart
@@ -0,0 +1,49 @@
+part of 'sos_device_bloc.dart';
+
+sealed class SosDeviceEvent extends Equatable {
+ const SosDeviceEvent();
+}
+
+class GetDeviceStatus extends SosDeviceEvent {
+ final String uuid;
+ const GetDeviceStatus(this.uuid);
+ @override
+ List