resolveRootOverlay static method

OverlayState? resolveRootOverlay(
  1. BuildContext? context
)

Resolve the best root overlay from a context or the app root.

Implementation

static OverlayState? resolveRootOverlay(BuildContext? context) {
  if (context != null) {
    // Prefer the true root overlay when available.
    final rootOverlay = Overlay.maybeOf(context, rootOverlay: true);
    if (rootOverlay != null && rootOverlay.mounted) return rootOverlay;

    // Fallback to the nearest overlay in unusual embed cases.
    final nearestOverlay = Overlay.maybeOf(context, rootOverlay: false);
    if (nearestOverlay != null && nearestOverlay.mounted) {
      return nearestOverlay;
    }
  }

  final rootElement = WidgetsBinding.instance.rootElement;
  if (rootElement == null) return null;

  final rootOverlay = Overlay.maybeOf(rootElement, rootOverlay: true);
  if (rootOverlay != null && rootOverlay.mounted) return rootOverlay;

  OverlayState? found;

  void visit(Element element) {
    // DFS search for an OverlayState as a last-resort fallback.
    if (found != null) return;
    if (element is StatefulElement && element.state is OverlayState) {
      final overlayState = element.state as OverlayState;
      if (overlayState.mounted) {
        found = overlayState;
        return;
      }
      return;
    }
    element.visitChildElements(visit);
  }

  visit(rootElement);
  return found;
}