buildNodes method
List<CustomAnimatedPositioned>
buildNodes(
- BuildContext context, {
- List<
Node< ? nodesToDraw,E> > - int level = 1,
override
Build the nodes of the graph
Implementation
@override
List<CustomAnimatedPositioned> buildNodes(BuildContext context,
{List<Node<E>>? nodesToDraw, bool hidden = false, int level = 1}) {
final nodes = nodesToDraw ?? controller.nodes;
final List<CustomAnimatedPositioned> nodeWidgets = [];
for (Node<E> node in nodes) {
final String nodeId = controller.idProvider(node.data);
nodeWidgets.add(
CustomAnimatedPositioned(
key: ValueKey(nodeId),
isBeingDragged: nodeId == draggedID,
duration: nodeId == draggedID ? Duration.zero : widget.duration,
curve: widget.curve,
left: node.position.dx,
top: node.position.dy,
width: controller.boxSize.width,
height: controller.boxSize.height,
child: RepaintBoundary(
child: Visibility(
visible: !hidden,
maintainAnimation: true,
maintainSize: true,
maintainState: true,
child: GestureDetector(
onTapDown: handleTapDown,
onLongPress: () => showNodeMenu(context, node),
onPanStart:
widget.isDraggable ? (_) => startDragging(node) : null,
onPanUpdate: widget.isDraggable
? (details) => updateDragging(node, details)
: null,
onPanEnd:
widget.isDraggable ? (_) => finishDragging(node) : null,
child: widget.builder(
NodeBuilderDetails(
item: node.data,
level: level,
hideNodes: ({hide, center = true}) =>
toggleHideNodes(node, hide, center),
nodesHidden: node.hideNodes,
isBeingDragged: nodeId == draggedID,
isOverlapped: overlappingNodes.isNotEmpty &&
overlappingNodes.first.data == node.data,
),
),
),
),
),
),
);
}
return nodeWidgets;
}