问题描述
我想一次在列表视图中实现音频播放。如果我按下所有项目的播放按钮,然后所有项目都开始同时播放,则会出现问题。但我不认为我想要一个如果我播放一个音频文件然后其他音频应该停止播放。 希望我清关了。 找到下面的代码。您的帮助将不胜感激。 谢谢!
import 'package:audioplayers/audioplayers.dart';
import 'package:Flutter/cupertino.dart';
import 'package:Flutter/material.dart';
import 'package:smarty_app/CommonWidgets/Constant.dart';
class ChatAudioPlayer extends StatefulWidget {
final String path;
ChatAudioPlayer({@required this.path});
@override
_ChatAudioPlayerState createState() => _ChatAudioPlayerState();
}
class _ChatAudioPlayerState extends State<ChatAudioPlayer>
with SingleTickerProviderStateMixin {
AudioPlayer audioPlayer = AudioPlayer();
String audioState = 'NOT WORKING';
Duration totalDuration;
Duration position;
bool isLoading = false;
Widget toView;
String timeSpan;
AnimationController _animationController;
bool isPlaying3 = false;
bool isSameAudio = false;
String printDuration(Duration duration) {
String twoDigits(int n) => n.toString().padLeft(2,"0");
String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60));
String twoDigitSeconds = twoDigits(duration.inSeconds.remainder(60));
return "${twoDigits(duration.inHours)}:$twoDigitMinutes:$twoDigitSeconds";
}
initAudio() {
audioPlayer.onDurationChanged.listen((updatedDuration) {
setState(() {
totalDuration = updatedDuration;
});
});
audioPlayer.onAudioPositionChanged.listen((updatedPosition) {
setState(() {
position = updatedPosition;
});
});
audioPlayer.onPlayerStateChanged.listen((playerState) {
if (playerState == AudioPlayerState.STOPPED) {
audioState = 'STOPPED';
} else if (playerState == AudioPlayerState.PAUSED) {
audioState = 'PAUSED';
} else if (playerState == AudioPlayerState.PLAYING) {
audioState = 'PLAYING';
} else if (playerState == AudioPlayerState.COMPLETED) {
audioState = 'COMPLETED';
}
});
}
startAudio() async {
await audioPlayer.play(widget.path);
}
pauseAudio() {
audioPlayer.pause();
}
resumeAudio() {
audioPlayer.resume();
}
stopAudio() {
audioPlayer.stop();
}
seekAudio(Duration durationToSeek) {
audioPlayer.seek(durationToSeek);
}
@override
void initState() {
super.initState();
print("PAth audio-- " + widget.path.toString());
if (!mounted) {
return;
}
_animationController = AnimationController(
duration: Duration(milliseconds: 250),// some const value
vsync: this,);
initAudio();
}
@override
void dispose() {
setState(() {
audioState = 'COMPLETED';
stopAudio();
});
audioPlayer.dispose();
super.dispose();
}
@override
// ignore: must_call_super
Widget build(BuildContext context) {
return Container(
decoration: res.myBoxdecoration.BoxdecorationForVideos(
color: Colors.transparent,radius: 5),child: Column(
crossAxisAlignment: CrossAxisAlignment.start,children: [
Row(
children: [
Expanded(
flex: 2,child: IconButton(
iconSize: 35,icon: AnimatedIcon(
icon: AnimatedIcons.play_pause,progress: _animationController,color: res.myColors.lightColor,),onpressed: () {
if (widget.path != null)
print("--------- " + widget.path);
if (audioState == "PLAYING") {
pauseAudio();
} else if (audioState == "COMPLETED") {
seekAudio(Duration(milliseconds: 15));
audioState = 'AGAIN';
resumeAudio();
setState(() {});
} else {
startAudio();
}
setState(() {
isPlaying3 = !isPlaying3;
isPlaying3
? _animationController.forward()
: _animationController.reverse();
});
},)
),Expanded(
flex: 12,child:
SliderTheme(
data: SliderThemeData(
inactiveTrackColor: Colors.grey[600],activeTrackColor: res.myColors.primaryColor,thumbColor: res.myColors.lightColor,thumbShape: RoundSliderThumbShape(
enabledThumbRadius: 7)),child: Slider(
min: 0.0,max: totalDuration != null
? totalDuration.inMilliseconds.todouble()
: 100,value: position != null
? position.inMilliseconds.todouble()
: 0,onChanged: (val) {
seekAudio(Duration(milliseconds: val.toInt()));
},],SizedBox(height: 3,Padding(
padding: const EdgeInsets.only(left: 20,right: 20),child: Text(totalDuration != null
? printDuration(totalDuration)
: '00:00',style: res.myTextStyle.buttonTextStyleLight())
),);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)