Flutter对话框加载动画插件dialog_loader的使用

Flutter对话框加载动画插件dialog_loader的使用

dialog_loader

Pub Package License: MIT

一个简单的加载器创建方式,你可以轻松地将加载器与流行的状态管理结合使用。

新功能 💥

  • 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

捐赠

如果你喜欢这个包?请买杯咖啡支持我 :)

buymeacoffe buymeacoffe

示例代码

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

1 回复

更多关于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. 显示加载对话框

你可以使用 DialogLoadershow 方法来显示一个加载对话框:

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),
  ),
);
回到顶部