import 'package:ai_chat_assistant/utils/assets_util.dart'; import 'package:flutter/material.dart'; import 'mini_audio_wave.dart'; /// 浮动图标与声波动画组合组件 /// /// 将ai_hd_clean.png图片和AudioWaveLargeMini声波效果组合成一个独立组件 class FloatingIconWithWave extends StatelessWidget { /// 动画控制器,用于驱动声波动画 final AnimationController animationController; /// 图标大小 final double iconSize; /// 声波颜色,默认为白色 final Color waveColor; /// 构造函数 const FloatingIconWithWave({ super.key, required this.animationController, required this.iconSize, this.waveColor = Colors.white, }); @override Widget build(BuildContext context) { return SizedBox( width: iconSize, height: iconSize, child: Stack( alignment: Alignment.center, children: [ // 背景图片 AssetsUtil.getImageWidget( 'ai_hd_clean.png', width: iconSize, height: iconSize, fit: BoxFit.contain, ), // 声波动画,距离底部13px的位置 Positioned( bottom: 13 * (iconSize / 198), // 按比例计算距离底部的位置 child: SizedBox( width: 96 * (iconSize / 144), // 最宽不超过96px(按图片原始宽度比例) height: 27 * (iconSize / 198), // 最高不超过27px(按图片原始高度比例) child: AudioWaveLargeMini( animationController: animationController, waveColor: waveColor, barSpacing: 2.5, // 减小间距以适应更小的宽度 minHeightRatio: 0.4, // 调整最小高度比例 maxHeightRatio: 1.0, // 保持最大高度比例 ), ), ), ], ), ); } }