flutter如何实现loading弹框
在Flutter中,如何实现一个自定义的loading弹框?我想在请求数据时显示一个加载动画,但系统自带的CircularProgressIndicator样式太简单。有没有办法实现带文字提示、动画效果或者半透明遮罩的loading弹框?最好能提供完整的代码示例,包括如何控制弹框的显示和隐藏。
2 回复
在Flutter中实现loading弹框,可使用showDialog配合CircularProgressIndicator。示例代码:
showDialog(
context: context,
barrierDismissible: false,
builder: (context) => AlertDialog(
content: Row(
children: [
CircularProgressIndicator(),
SizedBox(width: 10),
Text("加载中..."),
],
),
),
);
也可使用第三方库如flutter_easyloading简化实现。
更多关于flutter如何实现loading弹框的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现loading弹框主要有以下几种方式:
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("加载中..."),
],
),
),
);
},
);
}
// 关闭loading
Navigator.of(context).pop();
2. 使用第三方库 easy_loading
首先添加依赖:
dependencies:
flutter_easyloading: ^3.0.0
使用:
// 在main.dart中配置
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
builder: EasyLoading.init(),
);
}
}
// 显示loading
EasyLoading.show(status: '加载中...');
// 显示成功
EasyLoading.showSuccess('加载成功');
// 显示错误
EasyLoading.showError('加载失败');
// 隐藏loading
EasyLoading.dismiss();
3. 自定义Loading组件
class LoadingWidget extends StatelessWidget {
final String message;
const LoadingWidget({Key? key, this.message = '加载中...'}) : super(key: key);
@override
Widget build(BuildContext context) {
return Center(
child: Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
CircularProgressIndicator(),
SizedBox(height: 10),
Text(message),
],
),
),
);
}
}
推荐方案
对于简单的loading需求,推荐使用第一种方式;如果需要更丰富的功能和样式,建议使用easy_loading库,它提供了多种预设样式和动画效果。

