Flutter进度提示插件progress_alert的使用

Flutter进度提示插件progress_alert的使用

Progress Alert 是一个用于显示后台正在运行进程的可定制化提示框。

无错误的进度提示
带错误的进度提示

特性

  • 单行基本提示
  • 可定制特性:
    • 更改所有按钮文本
      • 更改高度
      • 更改位置为顶部/底部
      • 更改图标
    • 更改失败进程提示的显示时间

开始使用

你必须将该库作为依赖项添加到项目中。

dependencies:
  progress_alert: ^latest

然后运行 flutter packages get

示例项目

example 文件夹中有一个详细的示例项目。你可以直接运行并进行测试。以下是来自示例项目的代码片段:

基本设置

ProgressAlert() 添加到 MaterialApp 的构建器中,如示例所示:

Widget build(BuildContext context) {
  return MaterialApp(
    title: 'Flutter Demo',
    theme: ThemeData(
      primarySwatch: Colors.blue,
    ),
    builder: (context, child) => Stack(
      children: [child!, ProgressAlert()],
    ),
    home: const MyHomePage(title: 'Flutter Demo Home Page'),
  );
}

启动控制器:

final controller = ProgressPanel();

创建进度:

Future<void> func() async {
  await Future.delayed(const Duration(seconds: 3));
  setState(() {
    _counter++;
  });
}

ProgressItem progress = ProgressItem(
  process: func,
  processText: "Counter Incrementing",
  errorText: "Counter Incrementing Failed!",
  onCancel: () {
    print("Progress Cancelled");
  },
  onDone: () {
    print("Progress Done");
  },
  onError: (e) {
    print("Progress Failed:$e");
  },
);

添加并开始进程:

controller.addProcess(progress);

可定制特性

ProgressAlert

ProgressAlert(
  redoText: "Redi",
  height: 50,
  hideText: "Hide",
  cancelText: "Cancel",
  errorIcon: const Icon(Icons.error),
  progressIcon: const CircularProgressIndicator(),
  isTop: true,
)

ProgressItem

ProgressItem progress = ProgressItem(
  process: func,
  processText: "Counter Incrementing",
  errorText: "Counter Incrementing Failed!",
  onCancel: () {
    print("Progress Cancelled");
  },
  onDone: () {
    print("Progress Done");
  },
  onError: (e) {
    print("Progress Failed:$e");
  },
);

显示失败

final controller = ProgressPanel();
controller.setFailDuration = const Duration(seconds: 10);
// 如果你希望错误不从屏幕上清除,将其设为false
controller.changeRemoveFailAfterDuration = true;

示例代码

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      builder: (context, child) => Stack(
        children: [child!, ProgressAlert()],
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  final controller = ProgressPanel();

  void _incrementCounter() {
    ProgressItem progress = ProgressItem(
      process: func,
      processText: "Counter Incrementing",
      errorText: "Counter Incrementing Failed!",
      onCancel: () {
        debugPrint("Progress Cancelled");
      },
      onDone: () {
        debugPrint("Progress Done");
      },
      onError: (e) {
        debugPrint("Progress Failed:$e");
      },
    );
    controller.addProcess(progress);
  }

  [@override](/user/override)
  void initState() {
    controller.setFailDuration = const Duration(seconds: 10);
    // 如果你希望错误不从屏幕上清除,将其设为false
    controller.changeRemoveFailAfterDuration = true;
    super.initState();
  }

  Future<void> func() async {
    // 打开注释行以查看失败效果
    // List<int> list = [1, 2];
    await Future.delayed(const Duration(seconds: 3));
    // list.singleWhere((element) => element == 3);
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

更多关于Flutter进度提示插件progress_alert的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter进度提示插件progress_alert的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


progress_alert 是一个用于在 Flutter 应用中显示进度提示的插件。它可以帮助你在执行耗时操作时向用户展示一个加载提示,提升用户体验。以下是如何使用 progress_alert 插件的详细步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 progress_alert 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  progress_alert: ^1.0.0  # 请检查最新版本

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

2. 导入包

在你的 Dart 文件中导入 progress_alert 包。

import 'package:progress_alert/progress_alert.dart';

3. 使用 ProgressAlert

你可以使用 ProgressAlert 来显示和隐藏进度提示。以下是一个简单的示例:

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  Future<void> _showProgressAlert(BuildContext context) async {
    // 创建一个 ProgressAlert 实例
    ProgressAlert progressAlert = ProgressAlert(context);

    // 显示进度提示
    progressAlert.show();

    // 模拟一个耗时操作
    await Future.delayed(Duration(seconds: 3));

    // 隐藏进度提示
    progressAlert.dismiss();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Progress Alert Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () => _showProgressAlert(context),
          child: Text('Show Progress Alert'),
        ),
      ),
    );
  }
}

4. 自定义进度提示

ProgressAlert 提供了一些选项来自定义进度提示的外观和行为。例如,你可以设置提示的标题、消息、样式等。

ProgressAlert progressAlert = ProgressAlert(
  context,
  isDismissible: false, // 是否允许用户点击外部关闭
  progressType: ProgressType.normal, // 进度条类型:normal, circular, etc.
);

progressAlert.show(
  title: 'Loading...',
  message: 'Please wait',
  maxProgress: 100, // 进度最大值
);

// 更新进度
progressAlert.update(progress: 50);

// 隐藏进度提示
progressAlert.dismiss();

5. 进度条类型

ProgressAlert 支持多种进度条类型,你可以通过 progressType 参数来设置:

  • ProgressType.normal: 普通的水平进度条。
  • ProgressType.circular: 圆形进度条。
  • ProgressType.percent: 显示百分比的进度条。
ProgressAlert progressAlert = ProgressAlert(
  context,
  progressType: ProgressType.circular,
);

6. 处理用户交互

你可以通过 isDismissible 参数来控制用户是否可以点击外部关闭进度提示。

ProgressAlert progressAlert = ProgressAlert(
  context,
  isDismissible: false, // 不允许用户点击外部关闭
);

7. 销毁进度提示

在不需要进度提示时,记得调用 dismiss() 方法来销毁它,以避免内存泄漏。

progressAlert.dismiss();
回到顶部