show method

void show({
  1. required BuildContext context,
  2. required Widget child,
  3. bool dismissible = true,
  4. BoxDecoration backgroundDecoration = _classicDecoration,
  5. VoidCallback? onDismiss,
})

Implementation

void show({
  required BuildContext context,
  required Widget child,
  bool dismissible = true,
  BoxDecoration backgroundDecoration = _classicDecoration,
  VoidCallback? onDismiss,
}) {
  if (_entry != null) {
    // Перерисовать с новым child, если уже показывается
    _entry!.remove();
    _entry = null;
  }

  _entry = OverlayEntry(
    builder: (_) => Stack(
      children: [
        // затемнённый фон с возможностью закрытия
        if (dismissible)
          Positioned.fill(
            child: GestureDetector(
              onTap: () {
                hide();
                onDismiss?.call();
              },
              child: Container(decoration: backgroundDecoration),
            ),
          ),
        Center(child: child),
      ],
    ),
  );

  Overlay.of(context, rootOverlay: true).insert(_entry!);
}