美文网首页
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