showCustomAlertDialog static method

Future<void> showCustomAlertDialog({
  1. required BuildContext context,
  2. required String title,
  3. required String cancelText,
  4. required String confirmText,
  5. required String description,
  6. required VoidCallback onConfirm,
  7. VoidCallback? onCancel,
  8. TextStyle? titleTextStyle,
  9. TextStyle? descriptionTextStyle,
  10. Color? cancelColor,
  11. Color? confirmColor,
})

Implementation

static Future<void> showCustomAlertDialog({
  required BuildContext context,
  required String title,
  required String cancelText,
  required String confirmText,
  required String description,
  required VoidCallback onConfirm,
  VoidCallback? onCancel,
  TextStyle? titleTextStyle,
  TextStyle? descriptionTextStyle,
  Color? cancelColor,
  Color? confirmColor,
}) async {
  final _appTheme = GBTheme.of(context);

  void _closeDialog() {
    Navigator.of(context, rootNavigator: true).pop();
  }

  //NOTE: Set up the buttons
  Widget _cancelButton = TextButton(
    onPressed: onCancel ?? _closeDialog,
    style: TextButton.styleFrom(foregroundColor: cancelColor ?? _appTheme.textDisabled),
    child: Text(cancelText),
  );

  Widget _continueButton = TextButton(
    onPressed: () {
      _closeDialog();
      onConfirm();
    },
    style: TextButton.styleFrom(foregroundColor: confirmColor ?? _appTheme.accentError),
    child: Text(confirmText),
  );

  //NOTE: Set up the AlertDialog
  AlertDialog alert = AlertDialog(
    backgroundColor: _appTheme.backgroundBase,
    title: Text(title, style: titleTextStyle ?? _appTheme.textTheme.displaySmall),
    content: Text(
      description,
      style:
          descriptionTextStyle ??
          _appTheme.textTheme.bodyMedium?.copyWith(color: _appTheme.textBase.withOpacity(.7)),
    ),
    actions: [_cancelButton, _continueButton],
  );
  await showDialog(
    context: context,
    barrierDismissible: false,
    builder: (context) {
      return alert;
    },
  );
}