onWidgetClassAdded method
Update the graph when a widget class is added.
Implementation
void onWidgetClassAdded(FFWidgetClass widgetClass, FFProject project) {
// Resolve the widgetClasses map key — it can differ from node.key
// (see graph_builder.dart for the same pattern).
String? mapKey;
for (final entry in project.widgetClasses.entries) {
if (entry.value.node.key == widgetClass.node.key) {
mapKey = entry.key;
break;
}
}
final type =
mapKey != null && project.pageKeys.contains(mapKey)
? DependencyNodeType.page
: DependencyNodeType.component;
final nodeId = NodeIds.widgetClass(widgetClass.node.key);
final componentKeys = extractComponentKeys(widgetClass.node);
// Analyze dependencies upfront for node creation
final deps = WidgetClassGlobalDependencies.analyze(widgetClass);
// Add the node
graph.addNode(
DependencyNode(
id: nodeId,
type: type,
widgetClassKey: widgetClass.node.key,
componentClassKeys: componentKeys,
navigationTargetPageKeys: deps.navigationTargetPageKeys,
sheetDialogComponentKeys: deps.sheetDialogComponentKeys,
),
);
// Update index dependency
graph.addDependency(GlobalNodeIds.kIndexNodeId, nodeId);
// If it's a page, update routing
if (type == DependencyNodeType.page) {
graph.addDependency(GlobalNodeIds.kRoutingNodeId, nodeId);
graph.addDependency(nodeId, GlobalNodeIds.kRoutingNodeId);
}
// Apply global dependencies to graph (creates edges)
deps.applyToGraph(graph, nodeId);
// Add component dependencies
for (final componentKey in componentKeys) {
final componentNodeId = NodeIds.widgetClass(componentKey);
if (graph.hasNode(componentNodeId)) {
graph.addDependency(nodeId, componentNodeId);
}
}
}