duplicateNode method

void duplicateNode(
  1. String nodeId
)

Creates a duplicate of a node and adds it to the graph.

The duplicated node:

  • Has a new auto-generated ID
  • Is positioned 50 pixels down and right from the original
  • Has a cloned copy of the data if it implements NodeData
  • Has the same type, size, and ports as the original

Does nothing if the node doesn't exist.

Parameters:

  • nodeId: The ID of the node to duplicate

Example:

controller.duplicateNode('node1');

Implementation

void duplicateNode(String nodeId) {
  final node = _nodes[nodeId];
  if (node == null) return;

  // Clone the data if it implements NodeData interface, otherwise just copy the reference
  final clonedData = node.data is NodeData
      ? (node.data as NodeData).clone() as T
      : node.data;

  final duplicatedNode = Node<T>(
    id: '${node.id}_copy_${DateTime.now().millisecondsSinceEpoch}',
    type: node.type,
    position: node.position.value + const Offset(50, 50),
    data: clonedData,
    size: node.size.value,
    inputPorts: node.inputPorts,
    outputPorts: node.outputPorts,
  );

  addNode(duplicatedNode);
}