42 lines
843 B
Dart
42 lines
843 B
Dart
![]() |
import 'package:flutter/material.dart';
|
||
|
import 'package:lottie/lottie.dart';
|
||
|
|
||
|
class VoiceAnimation extends StatelessWidget {
|
||
|
/// 是否正在播放
|
||
|
final bool isPlaying;
|
||
|
|
||
|
/// Lottie 动画资源路径
|
||
|
final String animationAsset;
|
||
|
|
||
|
/// 静态图标
|
||
|
final IconData idleIcon;
|
||
|
|
||
|
/// 动画和图标的大小
|
||
|
final double size;
|
||
|
|
||
|
const VoiceAnimation({
|
||
|
super.key,
|
||
|
required this.isPlaying,
|
||
|
this.animationAsset = 'assets/animation/voice.json',
|
||
|
this.idleIcon = Icons.multitrack_audio, // 静态图标
|
||
|
this.size = 24.0,
|
||
|
});
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
if (isPlaying) {
|
||
|
return Lottie.asset(
|
||
|
animationAsset,
|
||
|
width: size,
|
||
|
height: size,
|
||
|
repeat: true,
|
||
|
);
|
||
|
} else {
|
||
|
return Icon(
|
||
|
idleIcon,
|
||
|
size: size,
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|