showConfirmDialog static method
dynamic
showConfirmDialog({})
Shwos a confirmation dialog
title
title for the dialog
message
Text message to be diplayed
content
can be used to override message
.
If content
is set, message
won't be used
buttonLeft
this is the primary button. This cannot be null.
If you have multiple buttons, then this will be displayed on left side
buttonRight
an optional button to be displayed on right side
autoPop
default to true. If false, Navigator.pop(context)
won't be called
onPressed
will be called when we press any button with button index as parameter
Index 0 => Left button and 1 => Right button
Implementation
static showConfirmDialog({
required BuildContext context,
final String? title,
final String? message,
final Widget? content,
required final String buttonLeft,
final String? buttonRight,
final bool autoPop = true,
final Function(int)? onPressed,
final bool barrierDismissible = true,
}) {
return showDialog(
context: context,
useRootNavigator: false,
barrierDismissible: barrierDismissible,
useSafeArea: true,
barrierColor: ESTheme.barrierColor(context),
builder: (BuildContext context) => RawKeyboardListener(
autofocus: true,
focusNode: FocusNode(),
onKey: (event) {
if (event.isKeyPressed(LogicalKeyboardKey.enter) ||
event.isKeyPressed(LogicalKeyboardKey.numpadEnter)) {
if (autoPop) Navigator.pop(context);
if (onPressed != null) onPressed(1);
}
},
child: CupertinoAlertDialog(
title: Column(
children: <Widget>[
Text(title ?? ''),
const SizedBox(height: 10),
],
),
content: content ?? Text(message ?? ''),
actions: [
Tooltip(
message: '[Esc]',
child: CupertinoDialogAction(
onPressed: () {
if (autoPop) Navigator.pop(context);
if (onPressed != null) onPressed(0);
},
child: Text(buttonLeft,
style: TextStyle(color: ESTheme.textColor(context))),
),
),
if (buttonRight != null)
Tooltip(
message: '[Press Enter]',
child: CupertinoDialogAction(
onPressed: () {
if (autoPop) Navigator.pop(context);
if (onPressed != null) onPressed(1);
},
child: Text(buttonRight,
style: TextStyle(
fontWeight: FontWeight.w600,
color: ESTheme.textColor(context))),
),
),
],
),
),
);
}