showOverlay method

OverlayEntry? showOverlay({
  1. required dynamic key,
  2. required Widget builder(
    1. Rect parent
    ),
  3. GlobalKey<State<StatefulWidget>>? parentKey,
  4. bool barrierDismissible = true,
})

Implementation

OverlayEntry? showOverlay({
  required dynamic key,
  required Widget Function(Rect parent) builder,
  GlobalKey? parentKey,
  bool barrierDismissible = true,
}) {
  assert(isInitialized);

  final overlay = Overlay.of(context!);

  if (holder.argStore.containsKey(ObjectTag.of(key))) {
    return getOverlay(key);
  }

  if (key is GlobalKey && parentKey == null) {
    parentKey = key;
  }

  final box = (parentKey?.currentState?.context.findRenderObject() ??
      context!.findRenderObject()) as RenderBox;
  final location = box.localToGlobal(Offset.zero);
  final size = box.size;

  final child = builder(
      Rect.fromLTWH(location.dx, location.dy, size.width, size.height));

  final entry = OverlayEntry(
    builder: (_) => barrierDismissible
        ? Stack(
            children: [
              GestureDetector(
                onTap: () => hideOverlay(key),
              ),
              child,
            ],
          )
        : child,
  );

  setArg(key: ObjectTag.of(key), value: entry);

  overlay.insert(entry);

  return entry;
}