mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-11-27 23:54:54 +00:00
Added a new StatusModel class to represent device statuses and implemented functionality to fetch and update device statuses in the DevicesCubit and DeviceModel classes. Also updated UI components to display device status information.
147 lines
3.9 KiB
Dart
147 lines
3.9 KiB
Dart
import 'package:syncrow_app/features/devices/model/function_model.dart';
|
|
import 'package:syncrow_app/features/devices/model/status_model.dart';
|
|
import 'package:syncrow_app/generated/assets.dart';
|
|
import 'package:syncrow_app/utils/resource_manager/constants.dart';
|
|
|
|
class DeviceModel {
|
|
int? activeTime;
|
|
String? category; //unused
|
|
String? categoryName; //unused
|
|
int? createTime; //unused
|
|
String? gatewayId; //unused
|
|
String? icon; //unused
|
|
String? id;
|
|
String? ip; //unused
|
|
double? lat; //unused
|
|
String? localKey;
|
|
double? lon; //unused
|
|
String? model;
|
|
String? name;
|
|
String? nodeId; //remove
|
|
bool? isOnline;
|
|
List<StatusModel> status = [];
|
|
String? ownerId; //unused
|
|
String? productId; //unused
|
|
String? productName;
|
|
bool? isSub; //unused
|
|
String? timeZone;
|
|
int? updateTime;
|
|
String? uuid;
|
|
DeviceType? productType;
|
|
bool isSelected = false;
|
|
late List<FunctionModel> functions;
|
|
DeviceModel({
|
|
this.activeTime,
|
|
this.category,
|
|
this.categoryName,
|
|
this.createTime,
|
|
this.gatewayId,
|
|
this.icon,
|
|
this.id,
|
|
this.ip,
|
|
this.lat,
|
|
this.localKey,
|
|
this.lon,
|
|
this.model,
|
|
this.name,
|
|
this.nodeId,
|
|
this.isOnline,
|
|
required this.status,
|
|
this.ownerId,
|
|
this.productId,
|
|
this.productName,
|
|
this.isSub,
|
|
this.timeZone,
|
|
this.updateTime,
|
|
this.uuid,
|
|
this.productType,
|
|
}) {
|
|
functions = getFunctions(productType!);
|
|
}
|
|
|
|
factory DeviceModel.fromJson(Map<String, dynamic> json) {
|
|
String icon = '';
|
|
DeviceType type = devicesTypesMap[json['productId']] ?? DeviceType.Other;
|
|
|
|
if (type == DeviceType.LightBulb) {
|
|
icon = Assets.iconsLight;
|
|
} else if (type == DeviceType.CeilingSensor ||
|
|
type == DeviceType.WallSensor) {
|
|
icon = Assets.iconsSensors;
|
|
} else if (type == DeviceType.AC) {
|
|
icon = Assets.iconsAC;
|
|
} else if (type == DeviceType.DoorLock) {
|
|
icon = Assets.iconsDoorLock;
|
|
} else if (type == DeviceType.Curtain) {
|
|
icon = Assets.iconsCurtain;
|
|
} else if (type == DeviceType.ThreeGang) {
|
|
icon = Assets.iconsLight;
|
|
} else if (type == DeviceType.Gateway) {
|
|
icon = Assets.iconsGateway;
|
|
} else {
|
|
icon = Assets.iconsLogo;
|
|
}
|
|
return DeviceModel(
|
|
activeTime: json['activeTime'],
|
|
category: json['category'],
|
|
categoryName: json['categoryName'],
|
|
createTime: json['createTime'],
|
|
gatewayId: json['gatewayId'],
|
|
icon: icon,
|
|
id: json['id'],
|
|
ip: json['ip'],
|
|
lat: double.tryParse(json['lat']),
|
|
localKey: json['localKey'],
|
|
lon: double.tryParse(json['lon']),
|
|
model: json['model'],
|
|
name: json['name'],
|
|
nodeId: json['nodeId'],
|
|
isOnline: json['online'],
|
|
ownerId: json['ownerId'],
|
|
productId: json['productId'],
|
|
productName: json['productName'],
|
|
isSub: json['sub'],
|
|
timeZone: json['timeZone'],
|
|
updateTime: json['updateTime'],
|
|
uuid: json['uuid'],
|
|
productType: type,
|
|
status: [],
|
|
// json['status']
|
|
// .map<StatusModel>((e) => StatusModel.fromJson(e))
|
|
// .toList(),
|
|
// devicesTypesMap[json['productName']] ?? DeviceType.Other,
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'activeTime': activeTime,
|
|
'category': category,
|
|
'categoryName': categoryName,
|
|
'createTime': createTime,
|
|
'gatewayId': gatewayId,
|
|
'icon': icon,
|
|
'id': id,
|
|
'ip': ip,
|
|
'lat': lat,
|
|
'localKey': localKey,
|
|
'lon': lon,
|
|
'model': model,
|
|
'name': name,
|
|
'nodeId': nodeId,
|
|
'online': isOnline,
|
|
'ownerId': ownerId,
|
|
'productId': productId,
|
|
'productName': productName,
|
|
'sub': isSub,
|
|
'timeZone': timeZone,
|
|
'updateTime': updateTime,
|
|
'uuid': uuid,
|
|
'productType': productType,
|
|
};
|
|
}
|
|
|
|
List<FunctionModel> getFunctions(DeviceType type) =>
|
|
devicesFunctionsMap[productType] ?? [];
|
|
}
|