Refactor Action class constructor to handle optional fields more efficiently

This commit is contained in:
mohammad
2025-05-19 13:24:49 +03:00
parent fca69cef73
commit e8e5ddd102

View File

@ -90,46 +90,27 @@ class Action {
String toRawJson() => json.encode(toJson()); String toRawJson() => json.encode(toJson());
static Action? fromJson(Map<String, dynamic> json) { static Action? fromJson(Map<String, dynamic> json) {
// Safely extract required fields with null checks
final String? actionExecutor = json["actionExecutor"] as String?; final String? actionExecutor = json["actionExecutor"] as String?;
final String? entityId = json["entityId"] as String?; final String? entityId = json["entityId"] as String?;
final String? productType = json['productType'] as String?;
final String? deviceName = json['deviceName'] as String?;
// Skip invalid actions with missing required fields
if (actionExecutor == null || if (actionExecutor == null || entityId == null) {
entityId == null ||
productType == null ||
deviceName == null) {
return null; return null;
} }
// Handle actions with 'name' and 'type'
if (json['name'] != null && json['type'] != null) {
return Action( return Action(
actionExecutor: actionExecutor, actionExecutor: actionExecutor,
entityId: entityId, entityId: entityId,
executorProperty: json["executorProperty"] != null
? ExecutorProperty.fromJson(json["executorProperty"])
: null,
name: json['name'] as String?, name: json['name'] as String?,
type: json['type'] as String?, type: json['type'] as String?,
productType: productType, productType: json['productType'] as String? ?? 'unknown',
deviceName: deviceName, deviceName: json['deviceName'] as String? ?? 'Delay Action',
); );
} }
// Handle actions with 'executorProperty'
if (json["executorProperty"] != null) {
return Action(
actionExecutor: actionExecutor,
entityId: entityId,
executorProperty: ExecutorProperty.fromJson(json["executorProperty"]),
productType: productType,
deviceName: deviceName,
);
}
return null; // Skip invalid actions
}
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"actionExecutor": actionExecutor, "actionExecutor": actionExecutor,
"entityId": entityId, "entityId": entityId,