handleExpandNonPrimitivesRecursive method
- String nodeId
Recursive version of handleExpandNonPrimitives (Shift+click).
Expands non-primitive children down the full hierarchy.
Implementation
Future<SchematicLayoutResult?> handleExpandNonPrimitivesRecursive(
String nodeId,
) async {
if (isToggling) {
return null;
}
final engine = _layoutEngine;
if (engine == null || schematicAdapter == null) {
return null;
}
setState(() {
isToggling = true;
togglingLabel = 'Expanding...';
pendingToggleNodeId = nodeId;
});
final completer = Completer<void>();
WidgetsBinding.instance.addPostFrameCallback((_) {
completer.complete();
});
await completer.future;
SchedulerBinding.instance.ensureVisualUpdate();
try {
final expanded = schematicAdapter!.expandNonPrimitivesRecursive(nodeId);
if (!expanded) {
if (mounted) {
setState(() {
isToggling = false;
pendingToggleNodeId = null;
});
}
return null;
}
final elkGraph = schematicAdapter!.schematic.toJsGraph();
final newLayout = await engine.computeLayoutFromElkGraph(
elkGraph,
sessionId: _sessionId,
);
if (newLayout.hasError || !mounted) {
if (mounted) {
setState(() {
isToggling = false;
pendingToggleNodeId = null;
});
}
return null;
}
setState(() {
layout = newLayout;
isToggling = false;
pendingToggleNodeId = null;
recentlyToggledNodeId = nodeId;
});
WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) {
setState(() {
recentlyToggledNodeId = null;
});
}
});
return newLayout;
} on Exception {
if (mounted) {
setState(() {
isToggling = false;
pendingToggleNodeId = null;
});
}
return null;
}
}