selectNodes method
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 selecttoggle: Iftrue, toggles each node's selection state. Iffalse(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();
}
}