Flutter动画进度条插件flutter_animated_progress_bar的使用
Flutter动画进度条插件flutter_animated_progress_bar的使用
Animated Progress Bar 插件介绍
Animated Progress Bar 是一个用于视频或音频的动画进度条组件,它具有以下特性:
- ✅ 完全控制动画
- ✅ 高度可定制化
- ✅ 边缘不裁剪以呈现现代外观(见音频示例)
- ✅ 拇指相关组件绘制在所有组件之上,实现炫酷效果(见视频示例)
功能演示
注意:此组件本身并不播放任何媒体!
快速示例
class Example extends StatefulWidget {
const Example({super.key});
@override
State<Example> createState() => _ExampleState();
}
class _ExampleState extends State<Example> with TickerProviderStateMixin {
late final ProgressBarController _controller;
@override
void initState() {
super.initState();
_controller = ProgressBarController(vsync: this);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return ProgressBar(
controller: _controller,
progress: const Duration(seconds: 30),
buffered: const Duration(seconds: 35),
total: const Duration(minutes: 1),
onSeek: (position) {
print('New position: $position');
},
);
}
}
使用说明
初始化 ProgressBarController
首先,你需要一个 ProgressBarController
来运行动画。类似于 AnimationController
,你需要传递一个 TickerProvider
,这可以通过在构造函数中配置 vsync
参数来完成。
class _ExampleState extends State<Example> with TickerProviderStateMixin {...}
然后添加 ProgressBarController
:
_controller = ProgressBarController(vsync: this);
接下来,添加媒体的 progress
和 total
持续时间。你还可以添加媒体的 buffered
位置。
ProgressBar(
controller: _controller,
progress: const Duration(seconds: 30),
buffered: const Duration(seconds: 35),
total: const Duration(minutes: 1),
onSeek: (position) {
print('New position: $position');
},
);
不要忘记在不再需要时 dispose
控制器。
自定义 ProgressBarController
你可以通过以下方式自定义动画的持续时间:
_controller = ProgressBarController(
vsync: this,
barAnimationDuration: const Duration(milliseconds: 300),
thumbAnimationDuration: const Duration(milliseconds: 200),
waitingDuration: const Duration(seconds: 3),
);
如果你想要更进一步,控制器提供了对动画的完全控制:
_controller.forward(); // 展开进度条,等待然后收缩。
_controller.expandBar(); // 展开进度条。
_controller.collapseBar(); // 收缩进度条。
_controller.stopBarAnimation(); // 停止进度条动画,如果正在运行。
_controller.expandThumb(); // 展开拇指。
_controller.collapseThumb(); // 收缩拇指。
_controller.stopThumbAnimation(); // 停止拇指动画,如果正在运行。
_controller.expandBar( // 使用自定义持续时间和曲线展开进度条。
duration: const Duration(seconds:1),
curve: Curves.easeIn,
);
这些启动动画的方法返回一个 TickerFuture
对象,当动画成功完成时会完成。这意味着你可以 await
它们以确保动画完成。
进度条自定义参数
你可以通过以下参数自定义 ProgressBar
:
参数 | 类型 | 描述 |
---|---|---|
alignment |
ProgressBarAlignment |
进度条相对于其总大小的对齐方式 |
barCapShape |
BarCapShape |
左右边缘的形状 |
progressBarIndicator |
ProgressBarIndicator |
要绘制的指示器 |
collapsedBarHeight |
double |
进度条的最小高度 |
collapsedThumbRadius |
double |
拇指的最小半径 |
expandedBarHeight |
double |
进度条的最大高度 |
expandedThumbRadius |
double |
拇指的最大半径 |
thumbGlowRadius |
double |
拇指周围的光晕半径 |
thumbElevation |
double |
拇头周围的阴影大小 |
thumbGlowColor |
Color |
拇指周围光晕的颜色 |
backgroundBarColor |
Color |
背景进度条的颜色 |
collapsedProgressBarColor |
Color |
折叠后的进度条颜色 |
collapsedBufferedBarColor |
Color |
折叠后的缓冲进度条颜色 |
collapsedThumbColor |
Color |
折叠后的拇指颜色 |
expandedProgressBarColor |
Color? |
展开后的进度条颜色 |
expandedBufferedBarColor |
Color? |
展开后的缓冲进度条颜色 |
expandedThumbColor |
Color? |
展开后的拇指颜色 |
lerpColorsTransition |
bool |
在折叠和展开状态之间转换时是否线性插值颜色 |
showBufferedWhenCollapsed |
bool |
折叠时是否显示缓冲进度条 |
要快速尝试所有这些功能,请查看 Playground。
示例代码
import 'package:flutter/material.dart';
import 'package:flutter_animated_progress_bar/flutter_animated_progress_bar.dart';
void main() {
runApp(const MaterialApp(home: AnimatedProgressBarExample()));
}
class AnimatedProgressBarExample extends StatefulWidget {
const AnimatedProgressBarExample({super.key});
@override
State<AnimatedProgressBarExample> createState() => _AnimatedProgressBarExampleState();
}
class _AnimatedProgressBarExampleState extends State<AnimatedProgressBarExample> with TickerProviderStateMixin {
late final ProgressBarController _controller;
@override
void initState() {
super.initState();
_controller = ProgressBarController(vsync: this);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Animated Progress Bar Example')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ProgressBar(
controller: _controller,
progress: const Duration(seconds: 30),
buffered: const Duration(seconds: 35),
total: const Duration(minutes: 1),
onSeek: (position) {
print('New position: $position');
},
),
ElevatedButton(
onPressed: () {
_controller.forward();
},
child: const Text('Start Animation'),
),
ElevatedButton(
onPressed: () {
_controller.stopBarAnimation();
},
child: const Text('Stop Animation'),
),
],
),
),
);
}
}
以上代码展示了如何创建一个包含动画进度条的应用,并通过按钮控制动画的开始和停止。希望这对您有所帮助!如果有任何问题或建议,请随时反馈。
更多关于Flutter动画进度条插件flutter_animated_progress_bar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动画进度条插件flutter_animated_progress_bar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个使用 flutter_animated_progress_bar
插件来创建动画进度条的示例代码。这个插件允许你以多种方式展示进度条,并且支持高度自定义。
首先,确保在你的 pubspec.yaml
文件中添加 flutter_animated_progress_bar
依赖:
dependencies:
flutter:
sdk: flutter
flutter_animated_progress_bar: ^1.0.7 # 请确保使用最新版本
然后运行 flutter pub get
来获取依赖。
接下来是一个完整的 Flutter 应用示例,展示了如何使用 flutter_animated_progress_bar
:
import 'package:flutter/material.dart';
import 'package:flutter_animated_progress_bar/flutter_animated_progress_bar.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Animated Progress Bar Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: ProgressBarScreen(),
);
}
}
class ProgressBarScreen extends StatefulWidget {
@override
_ProgressBarScreenState createState() => _ProgressBarScreenState();
}
class _ProgressBarScreenState extends State<ProgressBarScreen> with SingleTickerProviderStateMixin {
double _progress = 0.0;
@override
void initState() {
super.initState();
_animateProgress();
}
void _animateProgress() {
Future.delayed(Duration(seconds: 5), () {
setState(() {
_progress = 1.0;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Animated Progress Bar Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
AnimatedProgressBar(
progress: _progress,
animationDuration: 2000,
width: double.infinity,
padding: EdgeInsets.symmetric(vertical: 10.0),
borderRadius: 25.0,
backgroundColor: Colors.grey[300]!,
progressColor: Colors.blue,
autoStart: true,
),
SizedBox(height: 20.0),
Text(
'Progress: ${(_progress * 100).toInt()}%',
style: TextStyle(fontSize: 20),
),
],
),
),
);
}
}
代码解释
- 依赖添加:在
pubspec.yaml
文件中添加flutter_animated_progress_bar
依赖。 - 主应用结构:使用
MaterialApp
和Scaffold
创建一个基本的 Flutter 应用结构。 - 状态管理:使用
StatefulWidget
和SingleTickerProviderStateMixin
来管理进度条的状态。 - 动画启动:在
initState
方法中,使用Future.delayed
来模拟一个异步任务,并在 5 秒后将进度更新为 1.0。 - 进度条组件:使用
AnimatedProgressBar
组件,并传递必要的参数如progress
、animationDuration
、width
、padding
、borderRadius
、backgroundColor
和progressColor
。 - 显示进度:使用
Text
组件来显示当前的进度百分比。
运行这个示例代码,你将看到一个从 0% 到 100% 的动画进度条,并在 5 秒内完成进度。
这个示例展示了 flutter_animated_progress_bar
插件的基本用法,你可以根据需要进一步自定义和扩展。