使用Flutter怎么实现一个进度条效果
Flutter 是一款强大的移动应用开发框架,它提供了大量内置组件,并可以扩展自定义组件来帮助开发者创建美观和高效的应用程序。其中,进度条组件是非常常见的,它可以用于显示任务的完成度和预计剩余时间,让用户了解任务进展情况。本文将介绍使用 Flutter 实现进度条的方法。
一、进度条的结构
在 Flutter 中,进度条是一个非常简单的组件,它由一个居中的进度指示器和可选的进度百分比文本组成。有两种基本的进度条类型,一种是线性进度条,另一种是圆形进度条。下面让我们分别介绍这两种进度条的实现方法。
二、线性进度条的实现
1. 创建线性进度条
创建一个线性进度条非常简单,只需要使用 LinearProgressIndicator 组件即可:
LinearProgressIndicator()
这个组件会默认显示一个蓝色的进度条,如下图所示:

2. 自定义线性进度条
如果我们需要自定义线性进度条的样式,可以使用 LinearProgressIndicator 的一些属性和构造函数来进行定制化:
LinearProgressIndicator(
value: 0.8, // 进度条的实际进度
backgroundColor: Colors.grey,// 进度条的背景颜色
valueColor: AlwaysStoppedAnimation<Color>(Colors.red), // 进度条的颜色
minHeight: 10, // 进度条的最小高度
semanticsLabel: 'Loading', // 辅助功能的标签
)
这里介绍几个常用的属性:
- value:进度条的实际进度值,范围为 0.0 到 1.0,默认值为 null。
- backgroundColor:进度条的背景颜色,默认为 Colors.transparent。
- valueColor:进度条的颜色,使用 AlwaysStoppedAnimation 控制进度条颜色的渐变,可以使用自定义的颜色。
- minHeight:进度条的最小高度。
- semanticsLabel:为了帮助屏幕阅读器用户理解进度条的作用,可以使用语义标签。
3. 实现线性进度条动画
Flutter 提供了非常简单的方法来实现进度条的动画,可以让进度值实时变化,呈现出一种流畅的渐变效果。使用 Tween 动画对象可以在有限的时间内逐步地从初始值转换为最终值。下面是一个简单示例:
class LinearProgressBar extends StatefulWidget {
@override
_LinearProgressBarState createState() => _LinearProgressBarState();
}
class _LinearProgressBarState extends State<LinearProgressBar> with SingleTickerProviderStateMixin {
AnimationController animationController;
Animation<double> animation;
@override
void initState() {
super.initState();
animationController = AnimationController(vsync: this, duration: Duration(seconds: 2));
animation = Tween<double>(begin: 0, end: 1).animate(animationController)..addListener(() {
setState(() {
// 更新进度值
});
});
animationController.repeat();
}
@override
Widget build(BuildContext context) {
return LinearProgressIndicator(value: animation.value,);
}
@override
void dispose() {
animationController.dispose();
super.dispose();
}
}
以上代码中,我们创建了一个 AnimationController 对象,并将其与 Tween 对象组合进行了初始化,初始化后通过调用 animation.addListener 方法进行刷新,实现进度条动画。最后,通过 LinearProgressIndicator 组件将进度值传递给它,这样进度条就可以按照特定的步骤变化。
三、圆形进度条的实现
Flutter 提供了 CirculaProgressIndicator 组件来实现圆形进度条。同样的,可以使用构造函数或属性来自定义它的样式。下面介绍一下如何在 Flutter 中实现这个圆形进度条:
1. 创建圆形进度条
要创建一个圆形进度条,只需使用 CircularProgressIndicator 组件即可:
CircularProgressIndicator()
这个组件会默认显示一个蓝色的圆圈进度条,如下图所示:

2. 自定义圆形进度条
同样的,可以使用 CircularProgressIndicator 的一些属性和构造函数来进行样式的自定义:
CircularProgressIndicator(
value: 0.8, // 进度条的实际进度
backgroundColor: Colors.grey, // 进度条的背景颜色
valueColor: AlwaysStoppedAnimation<Color>(Colors.red), // 进度条的颜色
strokeWidth: 5.0, // 进度条的宽度
semanticsLabel: 'Loading', // 辅助功能的标签
)
其中极有可能的常用属性与线性进度条类似,不做过多说明。
3. 用动画实现圆形进度条
要在 Flutter 中实现圆形进度条的动画,我们需要使用 Tween 动画创建一个 AnimationController 对象,然后将它与 CircularProgressIndicator 组件配合使用,这样就能够控制进度条的渐变效果。接下来看一下这个动画是如何实现的:
class CircularProgressBar extends StatefulWidget {
@override
_CircularProgressBarState createState() => _CircularProgressBarState();
}
class _CircularProgressBarState extends State<CircularProgressBar> with SingleTickerProviderStateMixin {
AnimationController animationController;
Animation<double> animation;
@override
void initState() {
super.initState();
animationController = AnimationController(vsync: this, duration: Duration(seconds: 2));
animation = Tween<double>(begin: 0, end: 1).animate(animationController)..addListener(() {
setState(() {
// 更新进度值
});
});
animationController.repeat();
}
@override
Widget build(BuildContext context) {
return CircularProgressIndicator(
value: animation.value,
strokeWidth: 5.0,
);
}
@override
void dispose() {
animationController.dispose();
super.dispose();
}
}
以上代码中,我们创建了一个 AnimationController 对象,并将其与 Tween 对象组合进行了初始化。接下来,为动画对象设置监听器,当进度值发生变化时,会自动调用 setState 来刷新其界面。最后,通过 CircularProgressIndicator 组件将进度值传递给它,这样进度条就可以按照特定的步骤变化。
四、实现环形进度条
除了线性进度条和圆形进度条以外,Flutter 还提供了 CircularPercentIndicator 组件来实现环形进度条。CircularPercentIndicator 组件支持更多自定义属性来呈现环形进度条。与上面两个进度条类似,也需要使用构造函数或属性来自定义其样式。下面介绍一下使用 Flutter 实现环形进度条的方法:
1. 创建环形进度条
要创建 CircularPercentIndicator 组件,请先导入其依赖:
dependencies: percent_indicator: ^2.1.2
然后,使用以下方式即可创建环形进度条:
`dart
CircularPercentIndicator(
radius: 100.0, // 圆形进度条的半径
lineWidth: 10.0, // 进度条的宽度
percent: 0.8, // 进度条的实际进度
center: Text("80%"),
