showDialog static method
void
showDialog({
- Widget? title,
- Widget? content,
- Widget? cancel,
- Widget? confirm,
- String? titleText,
- String? cancelText,
- String? confirmText,
- EdgeInsets? titlePadding,
- EdgeInsets? contentPadding,
- EdgeInsets? actionPadding,
- VoidCallback? onConfirm,
- VoidCallback? onCancel,
- bool showTitle = true,
- bool showCancel = true,
- List<
Widget> ? actions, - Widget? foot,
- bool showClose = false,
- bool barrierDismissible = false,
- TextDirection? actionTextDirection,
- double actionSpacing = 12.0,
Implementation
static void showDialog({
Widget? title,
Widget? content,
Widget? cancel,
Widget? confirm,
String? titleText,
String? cancelText,
String? confirmText,
EdgeInsets? titlePadding,
EdgeInsets? contentPadding,
EdgeInsets? actionPadding,
VoidCallback? onConfirm,
VoidCallback? onCancel,
bool showTitle = true,
bool showCancel = true,
List<Widget>? actions,
Widget? foot,
bool showClose = false,
bool barrierDismissible = false,
TextDirection? actionTextDirection,
double actionSpacing = 12.0,
}) {
final context = Get.context!;
ThemeData themeData = Theme.of(context);
DialogThemeData dialogTheme = themeData.dialogTheme;
Get.dialog(
barrierDismissible: barrierDismissible,
PopScope(
canPop: barrierDismissible,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Dialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(context.comTheme.shapes.resolvedDialogRadius),
),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (showTitle) ...[
Padding(
padding: titlePadding ??
EdgeInsets.only(
left: 24.0,
top: 24.0,
right: 24.0,
bottom: content == null ? 20.0 : 0.0,
),
child: DefaultTextStyle(
style: dialogTheme.titleTextStyle ??
themeData.textTheme.titleLarge!,
textAlign: TextAlign.center,
child: title ??
Text(ComLocalizations.of(context).warmTips),
),
),
],
if (content != null) ...[
Padding(
padding: contentPadding ??
const EdgeInsets.only(
left: 24.0,
top: 16.0,
right: 24.0,
bottom: 24.0,
),
child: DefaultTextStyle(
style: dialogTheme.contentTextStyle ??
themeData.textTheme.bodyMedium!,
textAlign: TextAlign.center,
child: content,
),
),
],
Padding(
padding: actionPadding ??
const EdgeInsets.only(
left: 24.0,
top: 0.0,
right: 24.0,
bottom: 24.0,
),
child: OverflowBar(
spacing: actionSpacing,
overflowSpacing: actionSpacing / 2,
textDirection: actionTextDirection,
children: actions ??
[
LayoutBuilder(
builder: (BuildContext context,
BoxConstraints constraints) {
return ComButton(
width:
actionTextDirection == TextDirection.rtl
? constraints.maxWidth / 2 -
actionSpacing / 2
: constraints.maxWidth,
child: confirm ??
Text(
ComLocalizations.of(context).confirm,
style: TextStyle(
color: Theme.of(context)
.colorScheme
.inverseSurface),
),
onPressed: () => onConfirm != null
? onConfirm.call()
: Get.back(),
);
},
),
if (showCancel) ...[
LayoutBuilder(
builder: (BuildContext context,
BoxConstraints constraints) {
return ComButton(
width:
actionTextDirection == TextDirection.rtl
? constraints.maxWidth / 2 -
actionSpacing / 2
: constraints.maxWidth,
plain: true,
color: Theme.of(context)
.colorScheme
.onSurfaceVariant,
child: cancel ??
Text(ComLocalizations.of(context)
.cancel),
onPressed: () => onCancel != null
? onCancel.call()
: Get.back(),
);
},
),
]
],
),
),
],
),
),
Visibility(
visible: showClose,
child: foot ??
Container(
margin: const EdgeInsets.only(top: 12),
padding: const EdgeInsets.all(6),
decoration: BoxDecoration(
border: Border.all(
color: Colors.white60, // 边框颜色
width: 1.0, // 边框宽度
),
borderRadius: BorderRadius.circular(
context.comTheme.shapes.circularRadius),
),
child: GestureDetector(
child: const Icon(
Icons.close,
size: 20,
color: Colors.white60,
),
onTap: () {
Get.back();
},
),
),
)
],
),
),
);
}