我正在构建一个音乐播放器,我遇到了这个问题,想不出解决这个问题的方法,我有随机播放模式,当随机播放打开时,我按下下一首歌曲,它会转到下一首歌曲,然后当曲目结束时,它会验证随机播放是否打开,如果是,则重复曲目,如果没有,则重复下一首歌曲,这里的问题是当我从队列中选择另一首曲目时,因为当我这样做时,听众将执行,如果 shuffle 已打开且 next 已关闭,则再次验证,导致循环,我只能按 next 而不是从队列中转到下一首歌曲,代码如下:
state = {
shuffle: true,
next_song: false,
repeat_song: "",
}
if (this.state.repeat && !this.state.next_song) { //if user want to repeat a track
await TrackPlayer.pause();
await TrackPlayer.skip(this.state.repeat_song);
TrackPlayer.play();
}else {
let {title} = await TrackPlayer.getTrack(current_song);
let {current_track_id, current_track, cover, artist} = await this.get_info_track(tracks, title);
await AsyncStorage.setItem("last_song", JSON.stringify(current_track));
await AsyncStorage.setItem("last_song_duration", JSON.stringify(0));
this.setState({
current_track_id: current_track_id,
current_track: current_track,
cover: cover,
artist: artist,
repeat_song_id: current_song,
last_song_duration: 0,
next_song: false,
});
}
update_next_song = () => { //this will execute when the user press next, once is executed will be passed to false again
this.setState({next_song: true});
}
然后问题是当我从队列中选择时,下一首歌曲已经设置为false,并且第一个条件将始终为真,所以想不出办法来做到这一点
答案 0 :(得分:0)
您好,您可以将歌曲数组放入
Container(
height:100,
child: HtmlWidget( article.content ,
bodyPadding: EdgeInsets.zero,
overflow: TextOverflow.fade,
textStyle: GoogleFonts.nunito(textStyle: utils.ThemeText.relatedArticleTitle,fontStyle: FontStyle.normal,),
),
),
并使用
TrackPlayer.add(Array).
它会根据您的要求工作,谢谢:-)
TrackPlayer.skipToNext()
TrackPlayer.skipToPrevious();