我正在使用 AudioPlayer 包来开发音频/媒体播放器。为了从资产文件夹中加载音乐,我使用了 AudioCache 类,并且为了利用其他方法(暂停、停止和持续时间),我使用了 AudioPlayer。
当我单击按钮播放音乐时,它可以正常工作,但是当我再次单击该按钮以暂停音乐时,它根本不起作用(音乐继续播放)并且单击时两个图标都没有改变
我究竟做错了什么?
这是代码
class Music extends StatefulWidget {
@override
_MusicState createState() => _MusicState();
}
class _MusicState extends State<Music> {
Duration duration = new Duration();
Duration position = new Duration();
AudioCache player = AudioCache(); // AudioCache
AudioPlayer audioPlayer = AudioPlayer(); // AudioPlayer
bool playing = false;
void getAudio() async{
if(playing){
var result = await audioPlayer.pause();
if(result == 1) {
setState(() {
playing = false;
});
}
}else{
var result = await player.play('audio/music.mp3'); // to play the music from asset folder or local file
if(result == 1) {
setState(() {
playing = true;
});
}
}
audioPlayer.onDurationChanged.listen((Duration dd){
setState(() {
duration = dd;
});
});
audioPlayer.onAudioPositionChanged.listen((Duration dd){
setState(() {
position = dd;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('App Name', style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold, fontFamily: 'oswald'),),
centerTitle: true,
flexibleSpace: Image(
image: AssetImage('images/bg.jpg'),
fit: BoxFit.cover,
),
),
backgroundColor: Colors.grey[200],
body: SafeArea(
child: Container(
padding: EdgeInsets.all(25.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Slider(
value: position.inSeconds.toDouble(),
min: 0,
max: duration.inSeconds.toDouble(),
activeColor: Colors.deepOrange,
onChanged: (double value){
setState(() {
audioPlayer.seek(new Duration(seconds: value.toInt()));
});
},
),
SizedBox(height: 10.0,),
Ink(
decoration: const ShapeDecoration(
color: Colors.deepOrange,
shape: CircleBorder(),
),
child: IconButton(
icon: Icon(playing == false ? Icons.play_arrow : Icons.pause_circle),
iconSize: 50.0,
color: Colors.white,
onPressed: () {
getAudio(); // call function
},
),
),
],
),
),
),
);
}
}