import 'package:flutter/material.dart'; ///加载弹框 class ProgressDialog { static bool _isShowing = false; ///展示 {Widget child = const CircularProgressIndicator(valueColor: AlwaysStoppedAnimation(Colors.red),)} static void showProgress(BuildContext context) { _isShowing = false; if (!_isShowing) { _isShowing = true; Navigator.push( context, _PopRoute( child: _Progress( child: new Padding( padding: const EdgeInsets.all(12.0), child: new Center( //保证控件居中效果 child: new SizedBox( width: 120.0, height: 120.0, child: new Container( decoration: ShapeDecoration( color: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.all( Radius.circular(8.0), ), ), ), child: new Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ new CircularProgressIndicator( backgroundColor: Colors.white, strokeWidth: 4.0, valueColor: new AlwaysStoppedAnimation(Colors.grey), ), new Padding( padding: const EdgeInsets.only( top: 20.0, ), child: new Text( "加载中...", style: new TextStyle(fontSize: 22, color: Colors.grey), ), ), ], ), ), ), ), ), ), ), ); } } ///隐藏 static void hideProgress(BuildContext context) { if (_isShowing) { Navigator.of(context).pop(); _isShowing = false; } } } ///Widget class _Progress extends StatelessWidget { final Widget child; _Progress({ Key? key, required this.child, }) : assert(child != null), super(key: key); @override Widget build(BuildContext context) { return Material( color: Colors.transparent, child: Center( child: child, )); } } ///Route class _PopRoute extends PopupRoute { final Duration _duration = Duration(milliseconds: 300); Widget child; _PopRoute({required this.child}); @override Color get barrierColor => Colors.black54; @override bool get barrierDismissible => true; @override String? get barrierLabel => null; @override Widget buildPage(BuildContext context, Animation animation, Animation secondaryAnimation) { return child; } @override Duration get transitionDuration => _duration; }