dilemma static method

Future<DialogResult?> dilemma(
  1. BuildContext context, {
  2. required String title,
  3. required String content,
  4. String rightButton = "OK",
  5. String leftButton = "CANCEL",
  6. bool centerContent = false,
  7. bool barrierDismissible = true,
  8. bool? dark,
  9. VoidCallback? onTapedRight,
  10. VoidCallback? onTapedLeft,
})

选择项,确定或者取消。

用途

  • 参数选择
  • 内容判断
  • 条款确认

参数 |参数名|描述|是否必须|

  • context 上下文
  • title 信息标题
  • centerContent 是否居中显示,默认不居中。
  • onTapedRight 按钮点击事件响应。
  • onTapedLeft 排版,左边缩进的距离。
  • dark 是否强制指定夜间模式或者白天模式,不设置使用系统默认。
  • barrierDismissible 对话框空白区域点击关闭是否支持,默认支持点击空白区域可以关闭对话框。

Implementation

static Future<DialogResult?> dilemma(
  BuildContext context, {
  required String title,
  required String content,
  String rightButton = "OK",
  String leftButton = "CANCEL",
  bool centerContent = false,
  bool barrierDismissible = true,
  bool? dark,
  VoidCallback? onTapedRight,
  VoidCallback? onTapedLeft,
}) {
  bool _dark = dark ?? (Theme.of(context).brightness == Brightness.dark);
  Color _barrierColor = _dark ? Color(0xaa000000) : Color(0x9effffff);
  Color _backgroundColor = _dark ? Colors.black45 : Colors.white60;
  Color _fontColor = _dark ? Colors.white : Colors.black;
  return showDialog<DialogResult>(
    context: context,
    barrierColor: _barrierColor,
    barrierDismissible: barrierDismissible,
    builder: (context) {
      return Dialog(
        backgroundColor: _backgroundColor,
        // 对话框区域背景色
        elevation: 12.0,
        insetPadding: EdgeInsets.zero,
        clipBehavior: Clip.antiAlias,
        shape: const RoundedRectangleBorder(
          borderRadius: _borderRadius,
        ),
        // insetAnimationCurve: Curves.easeInOutQuad,
        // insetAnimationDuration: Duration(milliseconds: 5000),
        child: TernaryContainer(
          inDialog: true,
          header: Container(
            alignment: Alignment.center,
            padding: const EdgeInsets.only(top: 25.0, bottom: 10.0),
            child: Text(
              title,
              style: TextStyle(
                  color: _fontColor,
                  fontSize: 20.0,
                  shadows: kElevationToShadow[4]),
            ),
          ),
          content: Container(
            padding: const EdgeInsets.only(
                top: 10.0, bottom: 20.0, left: 20.0, right: 10.0),
            child: Text(
              content,
              textAlign: centerContent ? TextAlign.center : TextAlign.left,
              style: TextStyle(
                color: _fontColor,
              ),
            ),
          ),
          footer: Column(
            children: [
              Divider(
                color: Colors.grey,
                height: 2,
              ),
              Container(
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: [
                    Expanded(
                      child: Container(
                        alignment: Alignment.center,
                        child: TextButton(
                          onPressed: onTapedLeft ??
                              () {
                                Navigator.of(context).pop(
                                    DialogResult(status: false, code: 200));
                              },
                          child: Text(
                            leftButton,
                            textAlign: TextAlign.center,
                            style: TextStyle(
                                fontSize: 16.0,
                                color: Theme.of(context).primaryColor),
                          ),
                        ),
                      ),
                    ),
                    Container(
                      height: 48,
                      child: const VerticalDivider(
                        color: Colors.grey,
                        width: 2,
                      ),
                    ),
                    Expanded(
                      child: Container(
                        alignment: Alignment.center,
                        child: TextButton(
                          onPressed: onTapedRight ??
                              () {
                                Navigator.of(context).pop(
                                    DialogResult(status: true, code: 200));
                              },
                          child: Text(
                            rightButton,
                            textAlign: TextAlign.center,
                            style: TextStyle(
                                fontSize: 16.0,
                                color: Theme.of(context).primaryColor),
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
              ),
            ],
          ),
        ),
      );
    },
  );
}