【问题标题】:Flutter Button Icon not changing with audio player颤振按钮图标不随音频播放器改变
【发布时间】:2021-02-28 15:49:06
【问题描述】:

我正在尝试使用assets_audio_player 库制作一个收音机应用程序,它确实从链接中获取收音机流,并且一切正常,但是当我尝试相应地使播放/暂停按钮更改图标时,它只是不起作用,我尝试了两种方法:

1- 使用库构建器:

assetsAudioPlayer.builderCurrent(
              builder: (context, isPlaying){
                return PlayerBuilder.isPlaying(
                    player: assetsAudioPlayer,
                    builder: (context, isPlaying) {
                      return RawMaterialButton(
                          constraints: BoxConstraints.expand(width: 70, height: 70),
                          fillColor: Constants.WHITE,
                          shape: CircleBorder(),
                          child: RadiantGradientMask(
                            child: Icon(isPlaying ? Icons.pause : Icons.play_arrow ,
                              size: 42,
                              color: Constants.WHITE,
                            ),
                            gradient: gradient,
                          ),
                          onPressed: (){
                            assetsAudioPlayer.playOrPause();
                          }
                          );
                    });
              }
          ),

2- 使用普通按钮、布尔值和 setState:

RawMaterialButton(
            constraints: BoxConstraints.expand(width: 70, height: 70),
            fillColor: Constants.WHITE,
            shape: CircleBorder(),
            child: RadiantGradientMask(
              child: Icon(isPlaying ? Icons.pause : Icons.play_arrow ,
                size: 42,
                color: Constants.WHITE,
              ),
              gradient: gradient,
            ),
            onPressed: (){
              assetsAudioPlayer.playOrPause();
              setState(() {
                isPlaying = assetsAudioPlayer.isPlaying.value;
              });
            },

在第一种方法中,库开始流式传输,但图标根本没有改变(暂停/播放),在第二种方法中,它确实改变了,但是在按下按钮几次后,它会出现故障,并且“播放”变为“暂停”,“暂停”变为“播放”(反转)。

知道如何让它正常工作吗?

【问题讨论】:

    标签: flutter radio audio-player


    【解决方案1】:

    方法调用assetsAudioPlayer.playOrPause();是Async,setState({});是Sync。 您正在检查状态是否同步更改,但异步更改,您需要等待 playOrPause() 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 2020-11-02
      • 1970-01-01
      相关资源
      最近更新 更多