validate method
Throws a StateError unless every request node has a finite position and every pinned node keeps its own.
Implementation
void validate(GraphLayoutRequest request) {
final nodeIds = {for (final node in request.nodes) node.id};
if (positions.length != request.nodes.length ||
positions.keys.any((id) => !nodeIds.contains(id)) ||
positions.values.any(
(point) => !point.x.isFinite || !point.y.isFinite,
)) {
throw StateError('Layout returned invalid or incomplete geometry.');
}
for (final node in request.nodes.where((node) => node.pinned)) {
if (positions[node.id] != node.position) {
throw StateError('Layout moved pinned node ${node.id}.');
}
}
}