getRenderBox method

RenderBox? getRenderBox(
  1. String id
)

Retorna el RenderBox del widget, necesario para calcular posición y tamaño.

Estrategia dual:

  1. Si el widget usa getGlobalKey como key → usa globalKey.currentContext
  2. Si el widget usa McpMetadataKey directo como key → camina el element tree buscando el primer elemento cuyo widget.key tenga el mismo id, luego retorna su primer RenderBox descendiente.

Implementation

RenderBox? getRenderBox(String id) {
  // Estrategia 1: GlobalKey interna (flujo original)
  final context = getContext(id);
  if (context != null) {
    final rb = context.findRenderObject() as RenderBox?;
    if (rb != null) return rb;
  }

  // Estrategia 2: McpMetadataKey usado directamente en el árbol
  RenderBox? found;

  void visitElement(Element el) {
    if (found != null) return;
    final key = el.widget.key;
    if (key is McpMetadataKey && key.id == id) {
      found = _firstRenderBox(el);
      return;
    }
    el.visitChildElements(visitElement);
  }

  WidgetsBinding.instance.rootElement?.visitChildElements(visitElement);
  return found;
}