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

你可以使用 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),
  ),
);
回到顶部