getRenderBox method
Returns the RenderBox of the widget, needed to calculate position and size.
Triple strategy:
- If the widget uses getGlobalKey as key → uses globalKey.currentContext
- If the widget uses McpMetadataKey directly as key → walks the element tree
- If the widget uses ValueKey<String> with matching value → walks the element tree
Implementation
RenderBox? getRenderBox(String id) {
// Strategy 1: via getContext (covers GlobalKey, McpMetadataKey, and ValueKey)
final context = getContext(id);
if (context != null) {
final rb = context.findRenderObject() as RenderBox?;
if (rb != null) return rb;
}
// Strategy 2: deep search for first RenderBox in subtree
RenderBox? found;
void visitElement(Element el) {
if (found != null) return;
final key = el.widget.key;
final matches =
(key is McpMetadataKey && key.id == id) ||
(key is ValueKey<String> && key.value == id);
if (matches) {
found = _firstRenderBox(el);
return;
}
el.visitChildElements(visitElement);
}
WidgetsBinding.instance.rootElement?.visitChildElements(visitElement);
return found;
}