// // Created with Android Studio. // User: 三帆 // Date: 07/08/2019 // Time: 08:40 // email: sanfan.hx@alibaba-inc.com // tartget: 代码获取自: https://blog.csdn.net/O_time/article/details/86496537 // import 'dart:async'; import 'package:flutter/material.dart'; // ignore: must_be_immutable class NetLoadingDialog extends StatefulWidget { String loadingText; bool outsideDismiss; bool loading; Function dismissCallback; Future requestCallBack; NetLoadingDialog( {Key key, this.loadingText = "loading...", this.outsideDismiss = true, this.dismissCallback, this.loading, this.requestCallBack}) : super(key: key); @override State createState() => _LoadingDialog(); } class _LoadingDialog extends State { _dismissDialog() { if (widget.dismissCallback != null) { widget.dismissCallback(); } Navigator.of(context).pop(); } @override void initState() { super.initState(); if (widget.requestCallBack != null) { widget.requestCallBack.then((_) { Navigator.pop(context); }); } } @override Widget build(BuildContext context) { if (!widget.loading) { return Container(); } return new GestureDetector( onTap: widget.outsideDismiss ? _dismissDialog : null, child: Material( type: MaterialType.transparency, child: new Center( child: new SizedBox( width: 120.0, height: 120.0, child: new Container( decoration: ShapeDecoration( shape: RoundedRectangleBorder( borderRadius: BorderRadius.all( Radius.circular(8.0), ), ), ), child: new Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ new CircularProgressIndicator(), new Padding( padding: const EdgeInsets.only( top: 20.0, ), child: new Text( widget.loadingText, style: new TextStyle(fontSize: 12.0), ), ), ], ), ), ), ), ), ); } }