notice static method

Future<DialogResult?> notice(
  1. BuildContext context, {
  2. required String title,
  3. required String content,
  4. String buttonName = "Got it",
  5. VoidCallback? onPressed,
  6. double indent = 28,
  7. bool barrierDismissible = true,
  8. bool? dark,
})

通知,公告。

用途

  • 提示信息
  • 展示内容
  • 展示说明

For example:

  DialogProvider.notice(
    context,
    title: "通知",
    content: "Just told you.",
  );

参数

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

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

Implementation

static Future<DialogResult?> notice(
  BuildContext context, {
  required String title,
  required String content,
  String buttonName = "Got it",
  VoidCallback? onPressed, // 自定义回调按钮监听。
  double indent = 28,
  bool barrierDismissible = true,
  bool? dark,
}) {
  // 取宽,屏幕的72%用于对话框。
  double _width = MediaQuery.of(context).size.width * 0.72;
  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,
    // Color(0x9eB2EbF2) 忧郁蓝
    barrierColor: _barrierColor,
    barrierDismissible: barrierDismissible,
    builder: (BuildContext context) {
      return Dialog(
        backgroundColor: _backgroundColor,
        // 对话框区域背景色
        elevation: 12.0,
        insetPadding: EdgeInsets.zero,
        clipBehavior: Clip.hardEdge,
        shape: const RoundedRectangleBorder(borderRadius: _borderRadius),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          mainAxisAlignment: MainAxisAlignment.start,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            // title
            Container(
              width: _width,
              padding: EdgeInsets.fromLTRB(indent, 28.0, 8.0, 8.0),
              child: Text(
                title,
                style: TextStyle(
                    fontWeight: FontWeight.bold,
                    fontSize: 20.0,
                    color: _fontColor),
              ),
            ),
            SizedBox(
              width: _width,
              child: Divider(
                height: 18,
                thickness: 1.8,
                indent: indent,
                color: _dark ? Colors.white : Colors.black87,
              ),
            ),
            // content
            Container(
              width: _width,
              padding: EdgeInsets.fromLTRB((indent + 8.0), 8.0, 8.0, 8.0),
              child: Text(
                content,
                style: TextStyle(color: _fontColor),
              ),
            ),
            // button
            Container(
              width: _width,
              alignment: Alignment.centerRight,
              padding: const EdgeInsets.only(right: 8.0),
              child: TextButton(
                child: Text(
                  buttonName,
                  style: TextStyle(
                    fontSize: 16.0,
                    color: Theme.of(context).primaryColor,
                  ),
                ),
                onPressed: onPressed ??
                    () {
                      Navigator.of(context)
                          .pop(DialogResult(status: true, code: 200));
                    },
              ),
            )
          ],
        ),
      );
    },
  );
}