showERbAlertDialog<T extends Object?> function

Future<T?> showERbAlertDialog<T extends Object?>({
  1. required BuildContext context,
  2. Widget? title,
  3. Widget content(
    1. BuildContext context
    )?,
  4. EdgeInsetsGeometry titlePadding = EdgeInsets.zero,
  5. EdgeInsetsGeometry contentPadding = EdgeInsets.zero,
  6. ERbDialogData eRbDialogData = const ERbDialogData(),
  7. bool barrierDismissible = true,
})

Implementation

Future<T?> showERbAlertDialog<T extends Object?>({
  required BuildContext context,
  Widget? title,
  Widget Function(BuildContext context)? content,
  EdgeInsetsGeometry titlePadding = EdgeInsets.zero,
  EdgeInsetsGeometry contentPadding = EdgeInsets.zero,
  ERbDialogData eRbDialogData = const ERbDialogData(),
  bool barrierDismissible = true,
}) async {
  final reformedContentPadding = EdgeInsets.symmetric(
    horizontal: contentPadding.horizontal / 2,
  ).copyWith(
    top: title == null ? contentPadding.vertical / 2 : 0,
    bottom: contentPadding.vertical / 2,
  );

  final horizontalActionPadding = eRbDialogData.actionsPadding.horizontal / 2;

  final reformedActionsPadding = EdgeInsets.symmetric(
    horizontal: horizontalActionPadding,
  ).copyWith(
    top: title == null && content == null
        ? eRbDialogData.actionsPadding.vertical / 2
        : 0,
    bottom: eRbDialogData.actionsPadding.vertical / 2,
  );

  return showGeneralDialog<T>(
    context: context,
    barrierDismissible: barrierDismissible,
    barrierLabel: '',
    transitionBuilder: (context, a1, a2, widget) => Transform.scale(
      scale: a1.value,
      child: PopScope(
        //This prevent closing the dialog when pressing device's back button
        canPop: barrierDismissible,
        child: ERbOverflowTransformBox(
          transform: (constraints) =>
              ConstraintsTransformBox.unmodified(constraints),
          child: Padding(
            padding: const EdgeInsets.all(8.0),
            child: AlertDialog(
              title: title,
              titlePadding: titlePadding,
              content: content != null ? content(context) : null,
              contentPadding: reformedContentPadding,
              actions: eRbDialogData.actions?.call(context),
              actionsPadding: reformedActionsPadding,
              actionsAlignment: MainAxisAlignment.spaceAround,
              insetPadding: eRbDialogData.insetPadding,
              shape: eRbDialogData.shape,
              backgroundColor: eRbDialogData.backgroundColor,
            ),
          ),
        ),
      ),
    ),
    pageBuilder: (
      BuildContext context,
      Animation<double> animation,
      Animation<double> secondaryAnimation,
    ) =>
        const SizedBox(),
  );
}