Flutter对话框加载动画插件dialog_loader的使用
Flutter对话框加载动画插件dialog_loader的使用
dialog_loader
一个简单的加载器创建方式,你可以轻松地将加载器与流行的状态管理结合使用。
新功能 💥
barrierDismissible
默认在加载时设置为false
,并在加载完成时自动设置为true
。- 加载器支持资源文件和网络图像。
安装
在你的 pubspec.yaml
文件中包含 dialog_loader
:
dependencies:
flutter:
sdk: flutter
dialog_loader: version
现在可以在 Dart 代码中使用:
import 'package:dialog_loader/dialog_loader.dart';
预览
LoaderTheme.dialogDefault | LoaderTheme.dialogCircle |
---|---|
![]() |
![]() |
LoaderTheme.dialogDefault (左图标和右图标) | LoaderTheme.dialogCircle (网络图像) |
---|---|
![]() |
![]() |
使用 dialog_loader
包,你可以轻松地将加载器与流行的状态管理结合在一起处理状态更新,如加载、错误和成功状态。
使用
你可以在 GitHub 仓库中查看使用的示例:
https://github.com/sud0su/dialog_loader/tree/main/example/
创建一个新的实例,并传递上下文作为参数。
[@override](/user/override)
Widget build(BuildContext context) {
DialogLoader dialogLoader = DialogLoader(context: context);
}
创建默认选项的加载器:
_dialogLoader(context) async {
dialogLoader.show(
theme: LoaderTheme.dialogCircle,
title: Text("Loading"),
leftIcon: SizedBox(
child: CircularProgressIndicator(),
height: 25.0,
width: 25.0,
),
);
}
你不需要更新状态,只需传递值:
void _update() {
_dialogLoader(context);
Future.delayed(const Duration(seconds: 4), () {
dialogLoader.update(
title: Text("Done"),
leftIcon: Icon(Icons.done),
autoClose: false,
barrierDismissible: true,
);
});
}
构造函数
名称 | 描述 | 必须 | 默认值 |
---|---|---|---|
context | 用于渲染对话框的 BuildContext | 是 | 无 |
属性
名称 | 描述 | 必须 | 默认值 |
---|---|---|---|
theme | 加载器主题 | 否 | LoaderTheme.dialogDefault |
title | 加载器标题 | 否 | Container() |
leftIcon | 加载器左侧的部件(对于 dialogCircle 主题,在顶部) |
否 | Container() |
rightIcon | 加载器右侧的部件 | 否 | Container() |
barrierColor | 遮罩层颜色 | 否 | Colors.black26 |
borderRadius | 对话框边角圆角半径 | 否 | 5.0 |
backgroundColor | 对话框背景色 | 否 | Colors.white |
elevation | 阴影高度 | 否 | 5.0 |
autoClose | 处理完成后是否自动关闭加载器 | 否 | true |
barrierDismissible | 是否可以通过点击遮罩层来关闭加载器 | 否 | false |
捐赠
如果你喜欢这个包?请买杯咖啡支持我 :)

示例代码
import 'dart:async';
import 'package:dialog_loader/dialog_loader.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class ShowLoader {
static late DialogLoader _dialogLoader;
Future<void> show(BuildContext context) async {
_dialogLoader = DialogLoader(context: context);
_dialogLoader.show(
theme: LoaderTheme.dialogCircle,
title: Text("Loading"),
leftIcon: CircularProgressIndicator(),
);
}
void update(String title, IconData leftIcon, {Color colors: Colors.black87}) {
_dialogLoader.update(
title: Text(
title,
style: TextStyle(color: colors),
),
leftIcon: Icon(
leftIcon,
color: colors,
),
autoClose: false,
barrierDismissible: true,
);
}
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key}) : super(key: key);
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool show = false;
TextEditingController form1 = TextEditingController();
TextEditingController form2 = TextEditingController();
final ShowLoader showLoader = ShowLoader();
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Container(
padding: EdgeInsets.all(20.0),
child: ListView(
children: [
TextField(
controller: form1,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Email',
),
),
TextField(
controller: form2,
obscureText: true,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Password',
),
),
ElevatedButton(
child: Text("Sign In"),
onPressed: () async {
form1.clear();
form2.clear();
// 调用加载器
showLoader.show(context);
// 更改加载器
Future.delayed(const Duration(seconds: 4), () {
// 你不需要添加延迟时间,这只是为了演示
showLoader.update(
"There is no user record corresponding to this identifier. The user may have been deleted.",
Icons.error,
colors: Colors.red,
);
});
},
),
],
),
),
);
}
}
更多关于Flutter对话框加载动画插件dialog_loader的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter对话框加载动画插件dialog_loader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
dialog_loader
是一个用于 Flutter 的插件,它允许你轻松地在应用中显示一个带有加载动画的对话框。这个插件非常适合在需要等待异步操作完成时显示一个加载指示器,以改善用户体验。
安装插件
首先,你需要在 pubspec.yaml
文件中添加 dialog_loader
依赖:
dependencies:
flutter:
sdk: flutter
dialog_loader: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
使用 dialog_loader
1. 导入包
在使用 dialog_loader
之前,首先需要导入包:
import 'package:dialog_loader/dialog_loader.dart';
2. 显示加载对话框
你可以使用 DialogLoader
的 show
方法来显示一个加载对话框:
DialogLoader.show(context, message: "Loading...");
context
: 当前的 BuildContext。message
: 可选参数,显示在加载动画下方的文本。
3. 隐藏加载对话框
当你的异步操作完成后,你可以使用 DialogLoader.hide
方法来隐藏加载对话框:
DialogLoader.hide(context);
4. 完整示例
以下是一个完整的示例,展示了如何在异步操作期间显示加载对话框:
import 'package:flutter/material.dart';
import 'package:dialog_loader/dialog_loader.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
Future<void> _simulateLoading() async {
DialogLoader.show(context, message: "Loading...");
await Future.delayed(Duration(seconds: 3)); // 模拟一个耗时操作
DialogLoader.hide(context);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('DialogLoader Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _simulateLoading,
child: Text('Start Loading'),
),
),
);
}
}
自定义加载对话框
dialog_loader
提供了一些自定义选项,例如你可以通过 DialogLoader.show
方法的参数来自定义加载对话框的外观:
DialogLoader.show(
context,
message: "Loading...",
backgroundColor: Colors.black.withOpacity(0.5),
barrierDismissible: false,
loadingIndicator: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
),
);