defaultDialog<T> static method
Future<T?>
defaultDialog<T>({
- String title = "Alert",
- EdgeInsetsGeometry? titlePadding,
- TextStyle? titleStyle,
- Widget? content,
- EdgeInsetsGeometry? contentPadding,
- VoidCallback? onConfirm,
- VoidCallback? onCancel,
- VoidCallback? onCustom,
- Color? cancelTextColor,
- Color? confirmTextColor,
- String? textConfirm,
- String? textCancel,
- String? textCustom,
- Widget? confirm,
- Widget? cancel,
- Widget? custom,
- Color? backgroundColor,
- bool barrierDismissible = true,
- Color? buttonColor,
- String middleText = "\n",
- TextStyle? middleTextStyle,
- double radius = 20.0,
- List<
Widget> ? actions,
Show a default dialog
Implementation
static Future<T?> defaultDialog<T>({
String title = "Alert",
EdgeInsetsGeometry? titlePadding,
TextStyle? titleStyle,
Widget? content,
EdgeInsetsGeometry? contentPadding,
VoidCallback? onConfirm,
VoidCallback? onCancel,
VoidCallback? onCustom,
Color? cancelTextColor,
Color? confirmTextColor,
String? textConfirm,
String? textCancel,
String? textCustom,
Widget? confirm,
Widget? cancel,
Widget? custom,
Color? backgroundColor,
bool barrierDismissible = true,
Color? buttonColor,
String middleText = "\n",
TextStyle? middleTextStyle,
double radius = 20.0,
List<Widget>? actions,
}) async {
var leanCancel = onCancel != null || textCancel != null;
var leanConfirm = onConfirm != null || textConfirm != null;
actions ??= [];
if (cancel != null) {
actions.add(cancel);
} else {
if (leanCancel) {
actions.add(TextButton(
style: TextButton.styleFrom(
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 8),
shape: RoundedRectangleBorder(
side: BorderSide(
color: buttonColor ?? Theme.of(navigator!.context).colorScheme.secondary,
width: 2,
style: BorderStyle.solid),
borderRadius: BorderRadius.circular(radius)),
),
onPressed: () {
if (onCancel == null) {
back();
} else {
onCancel.call();
}
},
child: Text(
textCancel ?? "Cancel",
style: TextStyle(
color: cancelTextColor ?? Theme.of(navigator!.context).colorScheme.secondary),
),
));
}
}
if (confirm != null) {
actions.add(confirm);
} else {
if (leanConfirm) {
actions.add(TextButton(
style: TextButton.styleFrom(
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
backgroundColor: buttonColor ?? Theme.of(navigator!.context).colorScheme.secondary,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(radius)),
),
child: Text(
textConfirm ?? "Ok",
style: TextStyle(
color: confirmTextColor ?? Theme.of(navigator!.context).colorScheme.surface),
),
onPressed: () {
onConfirm?.call();
}));
}
}
Widget alertDialog = AlertDialog(
titlePadding: titlePadding ?? const EdgeInsets.all(8),
contentPadding: contentPadding ?? const EdgeInsets.all(8),
backgroundColor: backgroundColor ?? DialogTheme.of(navigator!.context).backgroundColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(radius))),
title: Text(title, textAlign: TextAlign.center, style: titleStyle),
content: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
content ??
Text(middleText,
textAlign: TextAlign.center, style: middleTextStyle),
const SizedBox(height: 16),
ButtonTheme(
minWidth: 78.0,
height: 34.0,
child: Wrap(
alignment: WrapAlignment.center,
spacing: 8,
runSpacing: 8,
children: actions,
),
)
],
),
buttonPadding: EdgeInsets.zero,
);
_isDialogOpen = true;
return dialog<T>(alertDialog, barrierDismissible: barrierDismissible).whenComplete(() {
_isDialogOpen = false;
});
}