flutter如何实现加载弹窗
在Flutter中如何实现一个加载弹窗?我想在数据加载时显示一个全屏的半透明弹窗,带有旋转的loading图标和文字提示,类似于常见的等待进度条。求具体实现代码或推荐的第三方库,最好能支持自定义样式和动画效果。
        
          2 回复
        
      
      
        Flutter中实现加载弹窗可使用showDialog和AlertDialog,结合CircularProgressIndicator显示加载动画。示例代码:
showDialog(
  context: context,
  barrierDismissible: false,
  builder: (context) => AlertDialog(
    content: Row(
      children: [
        CircularProgressIndicator(),
        SizedBox(width: 10),
        Text("加载中...")
      ],
    ),
  ),
);
更多关于flutter如何实现加载弹窗的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,可以通过以下几种方式实现加载弹窗:
1. 使用showDialog + CircularProgressIndicator
// 显示加载弹窗
void showLoadingDialog(BuildContext context) {
  showDialog(
    context: context,
    barrierDismissible: false, // 点击背景不关闭
    builder: (BuildContext context) {
      return Dialog(
        child: Padding(
          padding: EdgeInsets.all(20),
          child: Row(
            mainAxisSize: MainAxisSize.min,
            children: [
              CircularProgressIndicator(),
              SizedBox(width: 20),
              Text("加载中..."),
            ],
          ),
        ),
      );
    },
  );
}
// 关闭弹窗
void hideLoadingDialog(BuildContext context) {
  Navigator.of(context).pop();
}
2. 使用AlertDialog
void showLoadingAlert(BuildContext context) {
  showDialog(
    context: context,
    barrierDismissible: false,
    builder: (BuildContext context) {
      return AlertDialog(
        content: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            CircularProgressIndicator(),
            SizedBox(height: 16),
            Text("请稍候..."),
          ],
        ),
      );
    },
  );
}
3. 使用第三方库(推荐)
在pubspec.yaml中添加:
dependencies:
  flutter_spinkit: ^5.1.0
使用示例:
import 'package:flutter_spinkit/flutter_spinkit.dart';
void showCustomLoading(BuildContext context) {
  showDialog(
    context: context,
    barrierDismissible: false,
    builder: (BuildContext context) {
      return Dialog(
        child: Container(
          padding: EdgeInsets.all(20),
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              SpinKitFadingCircle(
                color: Colors.blue,
                size: 50.0,
              ),
              SizedBox(height: 16),
              Text("加载中..."),
            ],
          ),
        ),
      );
    },
  );
}
4. 封装成工具类
class LoadingDialog {
  static void show(BuildContext context, {String message = "加载中..."}) {
    showDialog(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return PopScope(
          canPop: false,
          child: AlertDialog(
            content: Row(
              children: [
                CircularProgressIndicator(),
                SizedBox(width: 15),
                Expanded(child: Text(message)),
              ],
            ),
          ),
        );
      },
    );
  }
  static void hide(BuildContext context) {
    Navigator.of(context, rootNavigator: true).pop();
  }
}
// 使用
LoadingDialog.show(context);
// 关闭时
LoadingDialog.hide(context);
使用建议:
- 对于简单需求,使用内置的CircularProgressIndicator
- 需要更多动画效果时,推荐使用flutter_spinkit
- 记得在异步操作完成后调用hide方法关闭弹窗
 
        
       
             
             
            

