show method

void show({
  1. required BuildContext context,
  2. required WidgetBuilder contextMenuBuilder,
  3. Widget? debugRequiredFor,
})

Shows the given context menu.

Since there can only be one shown context menu at a time, calling this will also remove any other context menu that is visible.

Implementation

void show({
  required BuildContext context,
  required WidgetBuilder contextMenuBuilder,
  Widget? debugRequiredFor,
}) {
  if (isShown) {
    // Update the currently-shown menu in-place by swapping the builder
    // and captured themes and rebuilding the existing overlay entry.
    _contextMenuBuilder = contextMenuBuilder;
    _menuOverlayEntry?.markNeedsBuild();
    return;
  }

  removeAny();
  final OverlayState overlayState = Overlay.of(
    context,
    rootOverlay: true,
    debugRequiredFor: debugRequiredFor,
  );
  _contextMenuBuilder = contextMenuBuilder;

  _menuOverlayEntry = OverlayEntry(
    builder: (BuildContext context) {
      final CapturedThemes capturedThemes = InheritedTheme.capture(
        from: context,
        to: Navigator.maybeOf(context)?.context,
      );
      return capturedThemes.wrap(_contextMenuBuilder!(context));
    },
  );
  _shownInstance = this;
  overlayState.insert(_menuOverlayEntry!);
}