showDialog static method

void showDialog({
  1. Widget? title,
  2. Widget? content,
  3. Widget? cancel,
  4. Widget? confirm,
  5. String? titleText,
  6. String? cancelText,
  7. String? confirmText,
  8. EdgeInsets? titlePadding,
  9. EdgeInsets? contentPadding,
  10. EdgeInsets? actionPadding,
  11. VoidCallback? onConfirm,
  12. VoidCallback? onCancel,
  13. bool showTitle = true,
  14. bool showCancel = true,
  15. List<Widget>? actions,
  16. Widget? foot,
  17. bool showClose = false,
  18. bool barrierDismissible = false,
  19. TextDirection? actionTextDirection,
  20. 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();
                    },
                  ),
                ),
          )
        ],
      ),
    ),
  );
}