import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:uuid/uuid.dart'; class SceneStaticFunction { final String icon; final String deviceName; final String code; final List operationalValues; final String deviceId; final String operationName; final String uniqueCustomId; SceneStaticFunction({ required this.icon, required this.deviceName, required this.code, required this.operationalValues, required this.deviceId, required this.operationName, }) : uniqueCustomId = const Uuid().v4(); SceneStaticFunction copyWith({ String? icon, String? name, String? code, List? operationalValues, String? deviceId, String? operationName, }) { return SceneStaticFunction( icon: icon ?? this.icon, deviceName: name ?? this.deviceName, code: code ?? this.code, operationalValues: operationalValues ?? this.operationalValues, deviceId: deviceId ?? this.deviceId, operationName: operationName ?? this.operationName, ); } Map toMap() { return { 'icon': icon, 'name': deviceName, 'code': code, 'operationalValues': operationalValues.map((x) => x.toMap()).toList(), 'deviceId': deviceId, 'operationName': operationName }; } factory SceneStaticFunction.fromMap(Map map) { return SceneStaticFunction( icon: map['icon'] ?? '', deviceName: map['name'] ?? '', code: map['code'] ?? '', operationalValues: List.from( map['operationalValues']?.map((x) => SceneOperationalValue.fromMap(x)), ), deviceId: map['deviceId'] ?? '', operationName: map['operationName'] ?? '', ); } String toJson() => json.encode(toMap()); factory SceneStaticFunction.fromJson(String source) => SceneStaticFunction.fromMap(json.decode(source)); @override String toString() { return 'SceneStaticFunction(icon: $icon, name: $deviceName, code: $code, operationalValues: $operationalValues, deviceId: $deviceId, operationName: $operationName)'; } @override bool operator ==(Object other) { if (identical(this, other)) return true; return other is SceneStaticFunction && other.icon == icon && other.deviceName == deviceName && other.code == code && other.operationName == operationName && listEquals(other.operationalValues, operationalValues) && other.deviceId == deviceId; } @override int get hashCode { return icon.hashCode ^ deviceName.hashCode ^ code.hashCode ^ deviceId.hashCode ^ operationName.hashCode ^ operationalValues.hashCode; } } class SceneOperationalValue { final String icon; final dynamic value; final String? description; SceneOperationalValue({ required this.icon, required this.value, this.description, }); SceneOperationalValue copyWith({ String? icon, dynamic value, String? description, }) { return SceneOperationalValue( icon: icon ?? this.icon, value: value ?? this.value, description: description ?? this.description, ); } Map toMap() { return {'icon': icon, 'value': value, 'description': description}; } factory SceneOperationalValue.fromMap(Map map) { return SceneOperationalValue( icon: map['icon'] ?? '', value: map['value'], description: map['description'], ); } String toJson() => json.encode(toMap()); factory SceneOperationalValue.fromJson(String source) => SceneOperationalValue.fromMap(json.decode(source)); @override String toString() => 'StaticFunctionOperationHelper(icon: $icon, value: $value, description: $description)'; @override bool operator ==(Object other) { if (identical(this, other)) return true; return other is SceneOperationalValue && other.icon == icon && other.description == description && other.value == value; } @override int get hashCode => icon.hashCode ^ value.hashCode ^ description.hashCode; }