duplicateNode method
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);
}