NodeWidget<T> class

A unified node widget that handles positioning, rendering, and interactions.

This widget is the primary UI component for rendering nodes in the flow graph. It handles:

  • Positioning and sizing based on Node state
  • Rendering ports at appropriate positions
  • Applying theme-based or custom styling
  • Managing user interactions (taps, hovers)
  • Reactive updates via MobX observables

The widget supports two usage patterns:

  1. Custom content: Provide a child widget for complete control over node appearance
  2. Default style: Use NodeWidget.defaultStyle for standard node rendering

Appearance can be customized per-node by providing optional appearance parameters which will override values from the theme.

Example with custom content:

NodeWidget<MyData>(
  node: myNode,
  child: MyCustomNodeContent(data: myNode.data),
  onNodeTap: (nodeId) => print('Tapped: $nodeId'),
  backgroundColor: Colors.blue.shade50,
)

Example with default style:

NodeWidget<MyData>.defaultStyle(
  node: myNode,
  connections: connections,
  onPortTap: handlePortTap,
)

See also:

  • Node, the data model for nodes
  • NodeTheme, which defines default styling
  • PortWidget, which renders individual ports
Inheritance
Available extensions

Constructors

NodeWidget({Key? key, required Node<T> node, Widget? child, NodeShape? shape, List<Connection> connections = const [], void onPortTap(String nodeId, String portId, bool isOutput)?, void onPortHover(String nodeId, String portId, bool isHover)?, void onNodeTap(String nodeId)?, void onNodeDoubleTap(String nodeId)?, ({bool isOutput, String nodeId, String portId})? hoveredPortInfo, Color? backgroundColor, Color? selectedBackgroundColor, Color? borderColor, Color? selectedBorderColor, double? borderWidth, double? selectedBorderWidth, BorderRadius? borderRadius, EdgeInsets? padding})
Creates a node widget with optional custom content.
const
NodeWidget.defaultStyle({Key? key, required Node<T> node, NodeShape? shape, List<Connection> connections = const [], void onPortTap(String nodeId, String portId, bool isOutput)?, void onPortHover(String nodeId, String portId, bool isHover)?, void onNodeTap(String nodeId)?, void onNodeDoubleTap(String nodeId)?, ({bool isOutput, String nodeId, String portId})? hoveredPortInfo, Color? backgroundColor, Color? selectedBackgroundColor, Color? borderColor, Color? selectedBorderColor, double? borderWidth, double? selectedBorderWidth, BorderRadius? borderRadius, EdgeInsets? padding})
Creates a node widget with default content layout.
const

Properties

backgroundColor Color?
Custom background color.
final
borderColor Color?
Custom border color.
final
borderRadius BorderRadius?
Custom border radius.
final
borderWidth double?
Custom border width.
final
child Widget?
Optional custom widget to display as node content.
final
connections List<Connection>
List of connections for determining which ports are connected.
final
hashCode int
The hash code for this object.
no setterinherited
hoveredPortInfo → ({bool isOutput, String nodeId, String portId})?
Information about the currently hovered port.
final
key Key?
Controls how one widget replaces another widget in the tree.
finalinherited
node Node<T>
The node data model to render.
final
onNodeDoubleTap → void Function(String nodeId)?
Callback invoked when the node is double-tapped.
final
onNodeTap → void Function(String nodeId)?
Callback invoked when the node is tapped.
final
onPortHover → void Function(String nodeId, String portId, bool isHover)?
Callback invoked when a port hover state changes.
final
onPortTap → void Function(String nodeId, String portId, bool isOutput)?
Callback invoked when a port is tapped.
final
padding EdgeInsets?
Custom padding inside the node.
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
selectedBackgroundColor Color?
Custom background color for selected state.
final
selectedBorderColor Color?
Custom border color for selected state.
final
selectedBorderWidth double?
Custom border width for selected state.
final
shape NodeShape?
Optional shape for the node.
final

Methods

build(BuildContext context) Widget
Describes the part of the user interface represented by this widget.
override
createElement() StatelessElement
Creates a StatelessElement to manage this widget's location in the tree.
inherited
debugDescribeChildren() List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children.
inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep.
inherited
toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) String
A string representation of this object.
inherited
toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) String
Returns a string representation of this node and its descendants.
inherited
toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a one-line detailed description of the object.
inherited
toStringShort() String
A short, textual description of this widget.
inherited
withAnnotationLayer(NodeFlowController<T> controller) Widget

Available on Widget, provided by the AnnotationLayerSupport extension

Wraps this widget with an annotation layer.

Operators

operator ==(Object other) bool
The equality operator.
inherited