说明
实现一个渐变进度条,要求
:
颜色渐变的过程是循序渐进的,而不是看起来像是将渐变条逐渐拉长了。
效果
源码
// 渐变进度条
Stack(
children: [
// 背景色板
Container(
width: 300,
height: 8,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.grey.withOpacity(0.15)),
),
// 着色
ClipRRect(
borderRadius: BorderRadius.circular(12),
// ShaderMask 着色器
child: ShaderMask(
// BlendMode 多种模式可选
//【BlendMode介绍】https://blog.csdn.net/chenlove1/article/details/84574237
blendMode: BlendMode.srcOver, // srcOver :将 源 合成到 目标上
shaderCallback: (Rect bounds) {
// 源图像
return const LinearGradient(
colors: [Color(0xFF7451ff), Color(0xff40d0fd)],
).createShader(const Rect.fromLTWH(0, 0, 300, 8));
},
// 目标图像
child: AnimatedContainer(
width: 200, // 进度
height: 8,
duration: Durations.medium1,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.grey.withOpacity(0.15),
),
),
),
)
],
)