美文网首页
Flutter - LoadingDialog

Flutter - LoadingDialog

作者: 西半球_ | 来源:发表于2020-03-08 15:12 被阅读0次

    使用

         showDialog(
                      context: context,
                      builder: (BuildContext context) {
                        return LoadingDialog(
                          title: "加载中...",
    //                     isCancel: true,
    //                     padding: EdgeInsets.fromLTRB(20, 15, 20, 15),
    //                     indicatorRadius: 20,
    //                     textSize: 14,
    //                     color: Colors.white70,
    //                     textColor: Colors.black45,
    //                     borderRadius: BorderRadius.circular(10),
                        );
                      }
                  );
    
    

    LoadingDialog

    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    
    class LoadingDialog extends Dialog {
      LoadingDialog({
        this.title,
        this.isCancel = true,
        this.indicatorRadius = 20,
        this.textSize = 14,
        Color color,
        Color textColor,
        BorderRadiusGeometry borderRadius,
        EdgeInsetsGeometry padding,
      }): _borderRadius = borderRadius == null ? BorderRadius.circular(2) : borderRadius,
            _padding = padding == null ? EdgeInsets.fromLTRB(20, 15, 20, 15) : padding,
            _color = color == null ? Colors.white : color,
            _textColor = textColor == null ? Colors.black45 : textColor;
      final String title;// 内容文本
      final bool isCancel;// 是否点击外部或者返回键关闭Dialog
      final Color _color;// 内容背景颜色
      final BorderRadiusGeometry _borderRadius;// 内容倒角半径
      final EdgeInsetsGeometry _padding;// 内容内边距
      final double indicatorRadius;// 菊花半径
      final Color _textColor;// 文本颜色
      final double textSize;// 字体大小
      List<Widget> _buildWidget() {
        List<Widget> widgets = List();
        widgets.add(CupertinoActivityIndicator(animating: true, radius: indicatorRadius,));
        if (title != null && title.isNotEmpty && title.trim().length > 0) {
          widgets.add(Flexible(
              child: Container(
                margin: EdgeInsets.only(top: 8),
                child: Text(
                  title,
                  style: TextStyle(
                    color: _textColor,
                    fontSize: textSize,
                  ),
                ),
              )
          ));
        }
        return widgets;
      }
      @override
      Widget build(BuildContext context) {
        return WillPopScope(
          onWillPop: () async => isCancel,// 拦截Android返回键
          child: GestureDetector(
            onTap: () {
              if (isCancel) {
    // 点击Dialog外部关闭Dialog
                Navigator.pop(context);
              }
            },
            child: Container(
              padding: EdgeInsets.all(20),// 外边距
              color: Colors.transparent,// 必须设置颜色之后外层GestureDetector的onTap才会回调
              child: GestureDetector(
                onTap: () {},// 点击Dialog不响应外部点击关闭事件
                child: Center(
                  child: Material(
                    color: _color,// 背景
                    borderRadius: _borderRadius,// 倒角
                    child: Padding(
                      padding: _padding,// 内边距
                      child: Column(
                        mainAxisSize: MainAxisSize.min,
                        crossAxisAlignment: CrossAxisAlignment.center,
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: _buildWidget(),
                      ),
                    ),
                  ),
                ),
              ),
            ),
          ),
        );
      }
    }
    

    相关文章

      网友评论

          本文标题:Flutter - LoadingDialog

          本文链接:https://www.haomeiwen.com/subject/pawddhtx.html