import 'package:flutter/material.dart'; import 'dart:math' as math; /// 小型按钮波形动画组件 /// /// 用于显示适合小按钮的波形动画,包含8个竖线,动画效果由外部动画控制器驱动 class AudioWaveLargeMini extends StatelessWidget { /// 动画控制器,用于驱动波形动画 final AnimationController animationController; /// 波形颜色,默认为白色 final Color waveColor; /// 构造函数 const AudioWaveLargeMini({ super.key, required this.animationController, this.waveColor = Colors.white, }); @override Widget build(BuildContext context) { return AnimatedBuilder( animation: animationController, // 使用传入的动画控制器 builder: (context, child) { return Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: List.generate(8, (index) { // 生成8个波形条 // 为每个竖线设置不同的相位,使动画更自然 final phase = index * 0.4; // 设置不同的频率变化 final frequency = 1.0 + (index % 3) * 0.2; // 计算波形高度(最小4.0,最大14.0) final height = 4.0 + 10.0 * math.sin( (animationController.value * 2 * math.pi * frequency) + phase ).abs(); // 构建单个波形条 return Padding( padding: const EdgeInsets.symmetric(horizontal: 2.0), // 左右间隔4px child: Container( width: 2, // 波形条宽度2px height: height, // 高度随动画变化 decoration: BoxDecoration( color: waveColor, borderRadius: BorderRadius.circular(2), // 圆角效果 ), ), ); }), ); }, ); } }