startNodeDrag method

void startNodeDrag(
  1. String nodeId, {
  2. MouseCursor? cursor,
})

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 dragged
  • cursor: 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);
  }
}