onWidgetClassAdded method

void onWidgetClassAdded(
  1. FFWidgetClass widgetClass,
  2. FFProject project
)

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);
    }
  }
}