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),
),
);





