0

我正在使用 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
                    },
                  ),
                ),
              ],
            ),
          ),
      ),
    );
  }
}

4

1 回答 1

0

您需要设置您的resulttoaudioplayer属性:

if (result.state == PlayerState.PLAYING) {
    setState(() {
      playing = true;
    });
  }
  audioPlayer = result;
于 2022-01-26T04:44:27.103 回答