selectNodes method

void selectNodes(
  1. List<String> nodeIds, {
  2. bool toggle = false,
})

Selects multiple nodes in the graph.

Automatically clears selections of other element types (connections, annotations). Requests canvas focus if not already focused.

Parameters:

  • nodeIds: List of node IDs to select
  • toggle: If true, toggles each node's selection state. If false (default), replaces current selection with the provided nodes.

Example:

// Replace selection with multiple nodes
controller.selectNodes(['node1', 'node2', 'node3']);

// Toggle multiple nodes (for multi-select)
controller.selectNodes(['node4', 'node5'], toggle: true);

Implementation

void selectNodes(List<String> nodeIds, {bool toggle = false}) {
  runInAction(() {
    // Clear other element types' selections
    clearConnectionSelection();
    annotations.clearAnnotationSelection();

    if (toggle) {
      // Cmd+drag: toggle selection state of intersecting nodes
      for (final nodeId in nodeIds) {
        final node = _nodes[nodeId];
        if (node != null) {
          if (_selectedNodeIds.contains(nodeId)) {
            // Node is selected, deselect it
            _selectedNodeIds.remove(nodeId);
            node.selected.value = false;
          } else {
            // Node is not selected, select it
            _selectedNodeIds.add(nodeId);
            node.selected.value = true;
          }
        }
      }
    } else {
      // Shift+drag: replace selection with intersecting nodes
      clearNodeSelection();

      for (final nodeId in nodeIds) {
        _selectedNodeIds.add(nodeId);
        final node = _nodes[nodeId];
        if (node != null) {
          node.selected.value = true;
        }
      }
    }
  });

  // Request focus only if canvas doesn't already have it
  if (!canvasFocusNode.hasFocus) {
    canvasFocusNode.requestFocus();
  }
}