Flutter进度指示器插件simple_progress_indicators的使用

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

Flutter进度指示器插件simple_progress_indicators的使用

概述

simple_progress_indicators 是一个用于显示进度或创建简单进度条动画的Flutter包。它支持实色和渐变色的进度条,并提供了几种不同类型的进度指示器。

如何使用

Linear Progress Indicator (线性进度指示器)

ProgressBar

ProgressBar 是一个基本的线性指示器小部件,可以生成带有可选背景的水平圆角矩形。

@override
Widget build(BuildContext context) {
  return const MaterialApp(
    home: Scaffold(
      body: Center(
        child: ProgressBar(
          value: 0.5,
          gradient: LinearGradient(
            begin: Alignment.topLeft,
            end: Alignment.bottomRight,
            colors: [Colors.yellowAccent, Colors.deepOrange],
          ),
        ),
      ),
    ),
  );
}

参数:

  • value:当前进度值,范围从 0.01.0
  • width:进度条宽度,默认为 200.0
  • height:进度条高度,默认为 10.0
  • color:进度条填充颜色
  • gradient:渐变填充,接受 Gradient
  • backgroundColor:进度条背景颜色,默认为透明

注意:不能同时指定 colorgradient 属性。

ProgressBarAnimation

ProgressBarAnimation 是一个简单的动画进度条小部件,它会根据给定的 duration 动画化 ProgressBar 小部件。

ProgressBarAnimation(
  duration: const Duration(seconds: 2),
  gradient: const LinearGradient(
    colors: [
      Colors.blue,
      Colors.purple,
    ],
  ),
  backgroundColor: Colors.grey.withOpacity(0.4),
)

参数:

  • duration:从 0%100% 的动画持续时间
  • widthheightcolorgradientbackgroundColor 同上
  • curve:动画曲线,默认为线性,可以使用 Curves 类中的其他曲线

AnimatedProgressBar

AnimatedProgressBar 是一个隐式动画小部件,它会在 value 发生变化时进行动画过渡。

AnimatedProgressBar(
  value: full ? 1.0 : 0.0,
  duration: const Duration(seconds: 3),
  gradient: const LinearGradient(
    colors: [
      Colors.amber,
      Colors.red,
    ],
  ),
  backgroundColor: Colors.grey.withOpacity(0.4),
)

参数:

  • value:目标进度值,需要改变
  • duration:从初始值到最终值的动画持续时间
  • widthheightcolorgradientbackgroundColorcurve 同上
  • onEnd:动画结束时的回调函数

示例代码

以下是一个完整的示例应用,展示了如何使用 simple_progress_indicators 包中的各种进度条:

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

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

class SimpleProgressIndicatorsApp extends StatefulWidget {
  const SimpleProgressIndicatorsApp({Key? key}) : super(key: key);

  @override
  State<SimpleProgressIndicatorsApp> createState() => _SimpleProgressIndicatorsAppState();
}

class _SimpleProgressIndicatorsAppState extends State<SimpleProgressIndicatorsApp> {
  bool full = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Simple Progress Indicator Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: [
              Column(
                children: [
                  const Text('ProgressBar'),
                  ProgressBar(
                    value: 0.5,
                    gradient: const LinearGradient(
                      colors: [
                        Colors.yellow,
                        Colors.red,
                      ],
                    ),
                    backgroundColor: Colors.grey.withOpacity(0.4),
                  ),
                ],
              ),
              Column(
                children: [
                  const Text('ProgressBarAnimation'),
                  ProgressBarAnimation(
                    duration: const Duration(seconds: 2),
                    gradient: const LinearGradient(
                      colors: [
                        Colors.blue,
                        Colors.purple,
                      ],
                    ),
                    backgroundColor: Colors.grey.withOpacity(0.4),
                  ),
                ],
              ),
              Column(
                children: [
                  const Text('AnimatedProgressBar'),
                  AnimatedProgressBar(
                    value: full ? 1.0 : 0.0,
                    duration: const Duration(seconds: 2),
                    gradient: const LinearGradient(
                      colors: [
                        Colors.amber,
                        Colors.red,
                      ],
                    ),
                    backgroundColor: Colors.grey.withOpacity(0.4),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      full = !full;
                      setState(() {});
                    },
                    child: Text(full ? 'To 0%' : 'To 100%'),
                  )
                ],
              )
            ],
          ),
        ),
      ),
    );
  }
}

通过这个示例,您可以了解如何在Flutter应用中使用 simple_progress_indicators 包来创建不同类型的进度条。希望这对您有所帮助!


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用simple_progress_indicators插件的示例代码。这个插件提供了一系列简单而美观的进度指示器,可以很方便地集成到你的应用中。

首先,确保你已经在pubspec.yaml文件中添加了simple_progress_indicators依赖:

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

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

接下来是一个完整的示例代码,展示了如何使用这个插件中的几种进度指示器:

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

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

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

class ProgressIndicatorDemo extends StatefulWidget {
  @override
  _ProgressIndicatorDemoState createState() => _ProgressIndicatorDemoState();
}

class _ProgressIndicatorDemoState extends State<ProgressIndicatorDemo> with SingleTickerProviderStateMixin {
  double _progress = 0.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Simple Progress Indicators Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            SizedBox(height: 20),
            Text('Circular Progress Indicator'),
            SizedBox(height: 10),
            CircularProgressIndicator(
              value: _progress,
              strokeWidth: 5.0,
              backgroundColor: Colors.grey[200]!,
              valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
            ),
            SizedBox(height: 40),
            Text('Dual CircularProgressIndicator'),
            SizedBox(height: 10),
            DualCircularProgressIndicator(
              value1: _progress,
              value2: _progress * 0.5,
              radius: 45.0,
              strokeWidth: 6.0,
              backgroundColor: Colors.grey[200]!,
              valueColor1: AlwaysStoppedAnimation<Color>(Colors.blue),
              valueColor2: AlwaysStoppedAnimation<Color>(Colors.green),
            ),
            SizedBox(height: 40),
            Text('Arc Progress Indicator'),
            SizedBox(height: 10),
            ArcProgressIndicator(
              value: _progress,
              size: 120.0,
              strokeWidth: 7.0,
              backgroundColor: Colors.grey[200]!,
              valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
              child: Center(
                child: Text(
                  '$_progress * 100%',
                  style: TextStyle(fontSize: 18, color: Colors.white),
                ),
              ),
            ),
            SizedBox(height: 40),
            Text('SemiCircularProgressIndicator'),
            SizedBox(height: 10),
            SemiCircularProgressIndicator(
              value: _progress,
              lineWidth: 10.0,
              backgroundColor: Colors.grey[200]!,
              progressColor: Colors.blue,
            ),
            SizedBox(height: 40),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  _progress += 0.1;
                  if (_progress >= 1.0) {
                    _progress = 0.0;
                  }
                });
              },
              child: Text('Increment Progress'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们展示了四种不同的进度指示器:

  1. CircularProgressIndicator:标准的圆形进度条。
  2. DualCircularProgressIndicator:双圆形进度条,可以显示两个不同的进度值。
  3. ArcProgressIndicator:弧形进度条,可以在进度条内部显示文本。
  4. SemiCircularProgressIndicator:半圆进度条。

此外,还有一个按钮用于递增进度值,以动态展示进度指示器的变化。

你可以根据需要调整这些进度指示器的样式和参数,以满足你的应用需求。

回到顶部