mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-07-14 17:25:47 +00:00
223 lines
5.8 KiB
Dart
223 lines
5.8 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
class CreateSceneModel {
|
|
/*
|
|
{
|
|
"unitUuid": "string",
|
|
"sceneName": "string",
|
|
"decisionExpr": "string",
|
|
"actions": [
|
|
{
|
|
"entityId": "string",
|
|
"actionExecutor": "string",
|
|
"executorProperty": {
|
|
"functionCode": "string",
|
|
"functionValue": {},
|
|
"delaySeconds": 0
|
|
}
|
|
}
|
|
]
|
|
}
|
|
*/
|
|
|
|
String unitUuid;
|
|
String sceneName;
|
|
String decisionExpr;
|
|
List<CreateSceneAction> actions;
|
|
CreateSceneModel({
|
|
required this.unitUuid,
|
|
required this.sceneName,
|
|
required this.decisionExpr,
|
|
required this.actions,
|
|
});
|
|
|
|
CreateSceneModel copyWith({
|
|
String? unitUuid,
|
|
String? sceneName,
|
|
String? decisionExpr,
|
|
List<CreateSceneAction>? actions,
|
|
}) {
|
|
return CreateSceneModel(
|
|
unitUuid: unitUuid ?? this.unitUuid,
|
|
sceneName: sceneName ?? this.sceneName,
|
|
decisionExpr: decisionExpr ?? this.decisionExpr,
|
|
actions: actions ?? this.actions,
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toMap([String? sceneId]) {
|
|
return {
|
|
if (sceneId == null) 'unitUuid': unitUuid,
|
|
'sceneName': sceneName,
|
|
'decisionExpr': decisionExpr,
|
|
'actions': actions.map((x) => x.toMap()).toList(),
|
|
};
|
|
}
|
|
|
|
factory CreateSceneModel.fromMap(Map<String, dynamic> map) {
|
|
return CreateSceneModel(
|
|
unitUuid: map['unitUuid'] ?? '',
|
|
sceneName: map['sceneName'] ?? '',
|
|
decisionExpr: map['decisionExpr'] ?? '',
|
|
actions: List<CreateSceneAction>.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));
|
|
|
|
@override
|
|
String toString() {
|
|
return 'CreateSceneModel(unitUuid: $unitUuid, sceneName: $sceneName, decisionExpr: $decisionExpr, actions: $actions)';
|
|
}
|
|
|
|
@override
|
|
bool operator ==(Object other) {
|
|
if (identical(this, other)) return true;
|
|
|
|
return other is CreateSceneModel &&
|
|
other.unitUuid == unitUuid &&
|
|
other.sceneName == sceneName &&
|
|
other.decisionExpr == decisionExpr &&
|
|
listEquals(other.actions, actions);
|
|
}
|
|
|
|
@override
|
|
int get hashCode {
|
|
return unitUuid.hashCode ^
|
|
sceneName.hashCode ^
|
|
decisionExpr.hashCode ^
|
|
actions.hashCode;
|
|
}
|
|
}
|
|
|
|
class CreateSceneAction {
|
|
String entityId;
|
|
String actionExecutor;
|
|
CreateSceneExecutorProperty executorProperty;
|
|
CreateSceneAction({
|
|
required this.entityId,
|
|
required this.actionExecutor,
|
|
required this.executorProperty,
|
|
});
|
|
|
|
CreateSceneAction copyWith({
|
|
String? entityId,
|
|
String? actionExecutor,
|
|
CreateSceneExecutorProperty? executorProperty,
|
|
}) {
|
|
return CreateSceneAction(
|
|
entityId: entityId ?? this.entityId,
|
|
actionExecutor: actionExecutor ?? this.actionExecutor,
|
|
executorProperty: executorProperty ?? this.executorProperty,
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'entityId': entityId,
|
|
'actionExecutor': actionExecutor,
|
|
'executorProperty': executorProperty.toMap(),
|
|
};
|
|
}
|
|
|
|
factory CreateSceneAction.fromMap(Map<String, dynamic> map) {
|
|
return CreateSceneAction(
|
|
entityId: map['entityId'] ?? '',
|
|
actionExecutor: map['actionExecutor'] ?? '',
|
|
executorProperty:
|
|
CreateSceneExecutorProperty.fromMap(map['executorProperty']),
|
|
);
|
|
}
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory CreateSceneAction.fromJson(String source) =>
|
|
CreateSceneAction.fromMap(json.decode(source));
|
|
|
|
@override
|
|
String toString() =>
|
|
'CreateSceneAction(entityId: $entityId, actionExecutor: $actionExecutor, executorProperty: $executorProperty)';
|
|
|
|
@override
|
|
bool operator ==(Object other) {
|
|
if (identical(this, other)) return true;
|
|
|
|
return other is CreateSceneAction &&
|
|
other.entityId == entityId &&
|
|
other.actionExecutor == actionExecutor &&
|
|
other.executorProperty == executorProperty;
|
|
}
|
|
|
|
@override
|
|
int get hashCode =>
|
|
entityId.hashCode ^ actionExecutor.hashCode ^ executorProperty.hashCode;
|
|
}
|
|
|
|
class CreateSceneExecutorProperty {
|
|
String functionCode;
|
|
dynamic functionValue;
|
|
int delaySeconds;
|
|
CreateSceneExecutorProperty({
|
|
required this.functionCode,
|
|
required this.functionValue,
|
|
required this.delaySeconds,
|
|
});
|
|
|
|
CreateSceneExecutorProperty copyWith({
|
|
String? functionCode,
|
|
dynamic functionValue,
|
|
int? delaySeconds,
|
|
}) {
|
|
return CreateSceneExecutorProperty(
|
|
functionCode: functionCode ?? this.functionCode,
|
|
functionValue: functionValue ?? this.functionValue,
|
|
delaySeconds: delaySeconds ?? this.delaySeconds,
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'functionCode': functionCode,
|
|
'functionValue': functionValue,
|
|
'delaySeconds': delaySeconds,
|
|
};
|
|
}
|
|
|
|
factory CreateSceneExecutorProperty.fromMap(Map<String, dynamic> map) {
|
|
return CreateSceneExecutorProperty(
|
|
functionCode: map['functionCode'] ?? '',
|
|
functionValue: map['functionValue'] ?? '',
|
|
delaySeconds: map['delaySeconds']?.toInt() ?? 0,
|
|
);
|
|
}
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory CreateSceneExecutorProperty.fromJson(String source) =>
|
|
CreateSceneExecutorProperty.fromMap(json.decode(source));
|
|
|
|
@override
|
|
String toString() =>
|
|
'CreateSceneExecutorProperty(functionCode: $functionCode, functionValue: $functionValue, delaySeconds: $delaySeconds)';
|
|
|
|
@override
|
|
bool operator ==(Object other) {
|
|
if (identical(this, other)) return true;
|
|
|
|
return other is CreateSceneExecutorProperty &&
|
|
other.functionCode == functionCode &&
|
|
other.functionValue == functionValue &&
|
|
other.delaySeconds == delaySeconds;
|
|
}
|
|
|
|
@override
|
|
int get hashCode =>
|
|
functionCode.hashCode ^ functionValue.hashCode ^ delaySeconds.hashCode;
|
|
}
|