NodeInstance.fromJson constructor

NodeInstance.fromJson(
  1. Map<String, dynamic> json, {
  2. required Map<String, NodePrototype> nodePrototypes,
  3. required Map<String, DataHandler> dataHandlers,
})

Implementation

factory NodeInstance.fromJson(
  Map<String, dynamic> json, {
  required Map<String, NodePrototype> nodePrototypes,
  required Map<String, DataHandler> dataHandlers,
}) {
  if (!nodePrototypes.containsKey(json['idName'].toString())) {
    throw Exception('Node prototype not found');
  }

  final prototype = nodePrototypes[json['idName'].toString()]!;

  final portPrototypes = Map.fromEntries(
    prototype.ports.map(
      (prototype) => MapEntry(prototype.idName, prototype),
    ),
  );

  json['ports'] ??= <String, dynamic>{};
  final ports = (_fixMap(json['ports'])).map(
    (id, portJson) {
      return MapEntry(
        id,
        PortInstance.fromJson(portJson, portPrototypes),
      );
    },
  );

  final fieldPrototypes = Map.fromEntries(
    prototype.fields.map(
      (prototype) => MapEntry(prototype.idName, prototype),
    ),
  );

  json['fields'] ??= <String, dynamic>{};
  final fields = (_fixMap(json['fields'])).map(
    (id, fieldJson) {
      return MapEntry(
        id,
        FieldInstance.fromJson(fieldJson, fieldPrototypes, dataHandlers),
      );
    },
  );

  final instance = NodeInstance(
    id: json['id'],
    prototype: prototype,
    ports: ports,
    fields: fields,
    state: NodeState(isCollapsed: json['state']['isCollapsed']),
    offset:
        Offset(json['offset'][0].toDouble(), json['offset'][1].toDouble()),
  );

  return instance;
}