showBsModal<T> function

Future<T?> showBsModal<T>({
  1. required BuildContext context,
  2. required WidgetBuilder builder,
  3. BsBackdrop backdrop = BsBackdrop.enabled,
  4. bool keyboard = true,
  5. bool centered = false,
})

Helper function to display a Bootstrap-style Modal dialog.

Integrates backdrop controls (closing on click, static animation) and keyboard events (Escape key closes dialog).

Implementation

Future<T?> showBsModal<T>({
  required BuildContext context,
  required WidgetBuilder builder,
  BsBackdrop backdrop = BsBackdrop.enabled,
  bool keyboard = true,
  bool centered = false,
}) {
  final showBackdrop = backdrop != BsBackdrop.disabled;
  final alignment = centered ? Alignment.center : Alignment.topCenter;

  return showGeneralDialog<T>(
    context: context,
    barrierDismissible: false,
    barrierLabel: 'Dismiss',
    barrierColor: Colors.transparent,
    transitionDuration: const Duration(milliseconds: 300),
    pageBuilder: (context, animation, secondaryAnimation) {
      return builder(context);
    },
    transitionBuilder: (context, animation, secondaryAnimation, child) {
      final slideAnimation = Tween<Offset>(
        begin: const Offset(0, -0.05),
        end: Offset.zero,
      ).animate(CurvedAnimation(
        parent: animation,
        curve: Curves.easeOut,
      ));

      return _BsModalBackdropWrapper(
        animation: animation,
        backdrop: backdrop,
        showBackdrop: showBackdrop,
        alignment: alignment,
        keyboard: keyboard,
        child: FadeTransition(
          opacity: animation,
          child: SlideTransition(
            position: slideAnimation,
            child: Material(
              color: Colors.transparent,
              type: MaterialType.transparency,
              child: child,
            ),
          ),
        ),
      );
    },
  );
}