showAlertDialog static method

void showAlertDialog(
  1. BuildContext context,
  2. SilAlertDialogData data, {
  3. Function? cancelFunc,
  4. Function? confrimFunc,
  5. Widget? titleWidget,
  6. Widget? contentWidget,
  7. List<Widget>? actionsWidget,
  8. TextAlign? contentTextAlign,
  9. bool? confrimCanPop = true,
  10. TextStyle? titleStyle,
  11. TextStyle? contentStyle,
  12. TextStyle? cancelButtonStyle,
  13. TextStyle? confrimButtonStyle,
})

@description: 显示弹窗(有图标,内容字号16,居中;其他,内容字号14,多行左对齐,两行居中) @param { data 弹窗数据 cancelFunc 取消操作 confrimFunc 确认操作 titleWidget 自定义标题 contentWidget 自定义内容 actionsWidget 自定义底部操作按钮 contentTextAlignment 内容对齐方式 titleStyle 标题文字样式 contentStyle 内容文字样式 cancelButtonStyle 取消按钮文字样式 confrimButtonStyle 确定按钮文字样式 confrimCanPop 点击确认按钮时是否退出,默认退出 } @return {void}

Implementation

static void showAlertDialog(
  BuildContext context,
  SilAlertDialogData data, {
  Function? cancelFunc,
  Function? confrimFunc,
  Widget? titleWidget,
  Widget? contentWidget,
  List<Widget>? actionsWidget,
  TextAlign? contentTextAlign,
  bool? confrimCanPop = true,
  TextStyle? titleStyle,
  TextStyle? contentStyle,
  TextStyle? cancelButtonStyle,
  TextStyle? confrimButtonStyle,
}) {
  Color fontColor = Color.fromRGBO(51, 51, 51, 1);
  if (SilAlertDialogInfo().mode == AlertDialogMode.Dark) {
    fontColor = Colors.white;
  }

  // 标题
  Widget? title;
  if (titleWidget != null) {
    title = titleWidget;
  } else if (data.title != null && data.title!.length > 0) {
    title = Container(
        child: Text(
      data.title!,
      textAlign: TextAlign.center,
      style: titleStyle ??
          (SilAlertDialogInfo().titleStyle ??
              TextStyle(
                  color: fontColor,
                  fontSize: 17.sp,
                  fontWeight: FontWeight.bold)),
    ));
  }

  // 内容
  Widget? content;
  if (contentWidget != null) {
    content = contentWidget;
  } else if (data.content != null && data.content!.length > 0) {
    content = Container(
        child: Text(
      data.content!,
      textAlign: contentTextAlign ?? TextAlign.center,
      style: contentStyle ??
          (SilAlertDialogInfo().contentStyle ??
              TextStyle(height: 1.4, color: fontColor, fontSize: 14.sp)),
    ));
  }

  // 底部操作按钮
  List<Widget> actions = [];
  if (actionsWidget != null && actionsWidget.length > 0) {
    actions = actionsWidget;
  } else {
    // 按钮的宽度:如果两个按钮都存在,就平分;否则就铺满
    double? buttonWidth;
    if (data.cancelButtonTitle != null && data.confrimButtonTitle != null) {
      buttonWidth = (MediaQuery.of(context).size.width -
              SilAlertDialogInfo().horizontalMargin * 2 -
              40) *
          0.5;
    }

    // 取消按钮
    if (data.cancelButtonTitle != null &&
        data.cancelButtonTitle!.length > 0) {
      actions.add(GestureDetector(
          behavior: HitTestBehavior.translucent,
          onTap: () {
            if (Navigator.canPop(context)) Navigator.pop(context);
            if (cancelFunc != null) cancelFunc();
          },
          child: Container(
              alignment: Alignment.center,
              height: SilAlertDialogInfo().buttonHeight,
              width: buttonWidth,
              child: Text(data.cancelButtonTitle!,
                  textAlign: TextAlign.center,
                  style: cancelButtonStyle ??
                      (SilAlertDialogInfo().cancelButtonStyle ??
                          TextStyle(color: fontColor, fontSize: 17.sp))))));
    }

    // 确认按钮
    if (data.confrimButtonTitle != null &&
        data.confrimButtonTitle!.length > 0) {
      actions.add(GestureDetector(
          behavior: HitTestBehavior.translucent,
          onTap: () {
            if (confrimCanPop == true) {
              if (Navigator.canPop(context)) Navigator.pop(context);
            }
            if (confrimFunc != null) confrimFunc();
          },
          child: Container(
              alignment: Alignment.center,
              height: SilAlertDialogInfo().buttonHeight,
              width: buttonWidth,
              child: Text(
                data.confrimButtonTitle!,
                textAlign: TextAlign.center,
                style: confrimButtonStyle ??
                    (SilAlertDialogInfo().confrimButtonStyle ??
                        TextStyle(
                            color: fontColor,
                            fontSize: 17.sp,
                            fontWeight: FontWeight.w400)),
              ))));
    }
  }

  show(context, title: title, content: content, actions: actions);
}