Flutter 按钮图标不随音频播放器改变
Flutter Button Icon not changing with audio player
我正在尝试制作一个广播应用程序,使用 assets_audio_player 库,它确实从 link 获取广播流,一切正常,但是当我尝试制作Play/Pause按钮相应地改变图标,它只是不起作用,我尝试了两种方法:
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;
});
},
第一种方法,库开始推流,但是图标完全没有变化(pause/play),第二种方法,它确实变了,但是按了几次按钮后,它出现故障,'play' 变为 'pause','pause' 变为 'play'(反转)。
知道如何让它正常工作吗?
方法调用assetsAudioPlayer.playOrPause();
是异步的,setState({});
是同步的。
您正在检查状态是否同步更改,但更改它是异步的,您需要等待 playOrPause()
方法。
我正在尝试制作一个广播应用程序,使用 assets_audio_player 库,它确实从 link 获取广播流,一切正常,但是当我尝试制作Play/Pause按钮相应地改变图标,它只是不起作用,我尝试了两种方法:
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;
});
},
第一种方法,库开始推流,但是图标完全没有变化(pause/play),第二种方法,它确实变了,但是按了几次按钮后,它出现故障,'play' 变为 'pause','pause' 变为 'play'(反转)。
知道如何让它正常工作吗?
方法调用assetsAudioPlayer.playOrPause();
是异步的,setState({});
是同步的。
您正在检查状态是否同步更改,但更改它是异步的,您需要等待 playOrPause()
方法。