defaultDialog<T> method
Future<T?>
defaultDialog<T>({
- String title = "Alert",
- EdgeInsetsGeometry? titlePadding,
- TextStyle? titleStyle,
- Widget? content,
- String? id,
- 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, - PopInvokedWithResultCallback<
T> ? onWillPop,
Custom UI Dialog.
Implementation
Future<T?> defaultDialog<T>({
String title = "Alert",
EdgeInsetsGeometry? titlePadding,
TextStyle? titleStyle,
Widget? content,
String? id,
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,
// ThemeData themeData,
List<Widget>? actions,
// onWillPop Scope
PopInvokedWithResultCallback<T>? onWillPop,
// the navigator used to push the dialog
GlobalKey<NavigatorState>? navigatorKey,
}) {
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.colorScheme.secondary,
width: 2,
style: BorderStyle.solid),
borderRadius: BorderRadius.circular(radius)),
),
onPressed: () {
if (onCancel == null) {
//TODO: Close current dialog after api change
closeAllDialogs();
} else {
onCancel.call();
}
},
child: Text(
textCancel ?? "Cancel",
style: TextStyle(
color: cancelTextColor ?? theme.colorScheme.secondary),
),
));
}
}
if (confirm != null) {
actions.add(confirm);
} else {
if (leanConfirm) {
actions.add(TextButton(
style: TextButton.styleFrom(
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
backgroundColor: buttonColor ?? theme.colorScheme.secondary,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(radius)),
),
child: Text(
textConfirm ?? "Ok",
style: TextStyle(
color: confirmTextColor ?? theme.colorScheme.surface),
),
onPressed: () {
onConfirm?.call();
}));
}
}
Widget baseAlertDialog = AlertDialog(
titlePadding: titlePadding ?? const EdgeInsets.all(8),
contentPadding: contentPadding ?? const EdgeInsets.all(8),
backgroundColor: backgroundColor ?? theme.dialogBackgroundColor,
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,
),
)
],
),
// actions: actions, // ?? <Widget>[cancelButton, confirmButton],
buttonPadding: EdgeInsets.zero,
);
return dialog<T>(
onWillPop != null
? PopScope<T>(
onPopInvokedWithResult: (didPop, result) =>
onWillPop(didPop, result),
// onPopInvoked: onWillPop,
child: baseAlertDialog,
)
: baseAlertDialog,
barrierDismissible: barrierDismissible,
navigatorKey: navigatorKey,
id: id,
);
}