Flutter加载提示对话框插件loading_alert_dialog的使用

发布于 1周前 作者 phonegap100 来自 Flutter

Flutter加载提示对话框插件loading_alert_dialog的使用

loading_alert_dialog 是一个可定制的 AlertDialog,它允许在阻塞应用程序时运行计算,类似于使用 showDialogshowCupertinoDialog,但不需要使用 StackOverlay 小部件。

开始使用

此包通过一个类 LoadingAlertDialog 暴露静态方法,这些方法包括:

  • showLoadingAlertDialog 这个主要的方法作为 showDialog/showCupertinoDialog 的包装器,通过 Future 控制,该 Future 通过 computation 参数提供。当提供的 Future 完成(无论是成功还是失败)时,对话框将自动关闭,并且方法调用本身会返回 Future 的结果或抛出异常。

  • setDefaultWidgetBuilder 通过在这里设置 WidgetBuilder,每次调用 showLoadingAlertDialog 都不需要提供 builder 参数。

如何使用示例

import 'package:loading_alert_dialog/loading_alert_dialog.dart';

LoadingAlertDialog.showLoadingAlertDialog<int>(
  context: context,
  builder: (context,) => Card(
    child: Padding(
      padding: const EdgeInsets.all(24.0,),
      child: Column(
        children: <Widget>[
          CircularProgressIndicator(),
          Text("请等待..."),
        ],
        mainAxisSize: MainAxisSize.min,
      ),
    ),
    color: Colors.white,
  ),
  computation: Future.delayed(
    Duration(seconds: 3,), () {
      final randomNumber = Random().nextInt(300);
      return randomNumber;
    },
  ),
).then((number) {
  if (number != null) {
    setState(() {
      _randomNumber = number;
    });
  }
});

上面的示例代码展示了如何创建一个简单的卡片,其中包含一个文本和一个 CircularProgressIndicator,持续3秒钟后弹出一个随机数,然后关闭对话框,并将弹出的数字显示到视图中。

完整示例代码

import 'dart:math';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:loading_alert_dialog/loading_alert_dialog.dart';

void main() {
  runApp(
    LoadingAlertDialogExampleApp(),
  );
}

class LoadingAlertDialogExampleApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      color: Colors.blue,
      home: LoadingAlertDialogExample(),
    );
  }
}

class LoadingAlertDialogExample extends StatefulWidget {
  [@override](/user/override)
  _LoadingAlertDialogExampleState createState() => _LoadingAlertDialogExampleState();
}

class _LoadingAlertDialogExampleState extends State<LoadingAlertDialogExample> {
  int _randomNumber = 0;

  void _showAlert() {
    LoadingAlertDialog.showLoadingAlertDialog<int>(
      context: context,
      builder: (context,) => Card(
        child: Padding(
          padding: const EdgeInsets.all(24.0),
          child: Column(
            children: <Widget>[
              CircularProgressIndicator(),
              Text("请等待..."),
            ],
            mainAxisSize: MainAxisSize.min,
          ),
        ),
        color: Colors.white,
      ),
      computation: Future.delayed(
        Duration(seconds: 3,), () {
          final randomNumber = Random().nextInt(100);
          return randomNumber;
        },
      ),
    ).then((number) {
      if (number != null) {
        setState(() {
          _randomNumber = number;
        });
      }
    },);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("加载提示对话框示例"),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(24.0),
          child: Column(
            children: <Widget>[
              Text("随机数: $_randomNumber"),
              ElevatedButton(
                child: Text("显示对话框"),
                onPressed: _showAlert,
              ),
            ],
            mainAxisSize: MainAxisSize.min,
          ),
        ),
      ),
    );
  }
}

更多关于Flutter加载提示对话框插件loading_alert_dialog的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加载提示对话框插件loading_alert_dialog的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用loading_alert_dialog插件来显示加载提示对话框的示例代码。这个插件允许你轻松地显示一个带有加载指示器的对话框,从而提升用户体验。

首先,你需要在pubspec.yaml文件中添加loading_alert_dialog依赖:

dependencies:
  flutter:
    sdk: flutter
  loading_alert_dialog: ^x.y.z  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Dart文件中,你可以按照以下方式使用loading_alert_dialog

import 'package:flutter/material.dart';
import 'package:loading_alert_dialog/loading_alert_dialog.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final LoadingAlertDialog _loadingDialog = LoadingAlertDialog();

  void _showLoadingDialog() {
    showDialog(
      context: context,
      barrierDismissible: false, // 设置为false使用户不能通过点击背景关闭对话框
      builder: (BuildContext context) {
        return _loadingDialog.create(
          context,
          title: '加载中...',
          message: '请稍候...',
          barrierColor: Colors.black.withOpacity(0.5), // 背景遮罩层的颜色
          progressIndicator: CircularProgressIndicator(), // 自定义的进度指示器
        );
      },
    );
  }

  void _dismissLoadingDialog() {
    _loadingDialog.dismiss(context);
  }

  Future<void> _simulateLongRunningTask() async {
    _showLoadingDialog();
    await Future.delayed(Duration(seconds: 3)); // 模拟一个耗时操作
    _dismissLoadingDialog();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Loading AlertDialog Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _simulateLongRunningTask,
          child: Text('开始加载'),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。当用户点击按钮时,会显示一个加载提示对话框,模拟一个耗时操作(使用Future.delayed),操作完成后关闭对话框。

代码解释:

  1. 依赖导入:首先,我们导入了flutter/material.dartloading_alert_dialog包。
  2. 创建LoadingAlertDialog实例:在_MyHomePageState类中,我们创建了一个LoadingAlertDialog的实例。
  3. 显示对话框_showLoadingDialog方法使用showDialog函数显示加载对话框。这里,我们传递了对话框的标题、消息、背景遮罩层的颜色和自定义的进度指示器。
  4. 关闭对话框_dismissLoadingDialog方法用于关闭加载对话框。
  5. 模拟耗时操作_simulateLongRunningTask方法模拟了一个耗时操作,首先显示加载对话框,然后等待3秒,最后关闭对话框。
  6. UI布局:在build方法中,我们创建了一个简单的UI,包含一个按钮,当用户点击按钮时,调用_simulateLongRunningTask方法。

这个示例展示了如何在Flutter应用中使用loading_alert_dialog插件来显示和隐藏加载提示对话框。你可以根据需要自定义对话框的样式和行为。

回到顶部