startNodeDrag method
Starts a node drag operation.
Call this from NodeWidget's GestureDetector.onPanStart. If the node is part of a selection, all selected nodes will be dragged together.
This method:
- Selects the node if not already selected
- Brings the node to front (increases z-index)
- Sets up drag state and cursor
- Disables canvas panning during drag
- Fires the drag start event
Parameters:
nodeId: The ID of the node being draggedcursor: The cursor to display during drag (optional, defaults to grabbing)
Implementation
void startNodeDrag(String nodeId, {MouseCursor? cursor}) {
final wasSelected = selectedNodeIds.contains(nodeId);
// Select node if not already selected
if (!wasSelected) {
selectNode(nodeId);
}
// Bring node to front
bringNodeToFront(nodeId);
runInAction(() {
// Set drag state
interaction.draggedNodeId.value = nodeId;
// Cursor is handled by widgets via their MouseRegion
// Disable panning during node drag
interaction.panEnabled.value = false;
// Update visual dragging state on all affected nodes
// Re-check selection since we might have just selected the node
final nodeIds = selectedNodeIds.contains(nodeId)
? selectedNodeIds.toList()
: [nodeId];
for (final id in nodeIds) {
_nodes[id]?.dragging.value = true;
}
});
// Fire drag start event
final node = _nodes[nodeId];
if (node != null) {
events.node?.onDragStart?.call(node);
}
}