我正在开发音乐播放器应用app。我正在使用audioplayers插件来获取所有mp3文件并播放音乐。 我创建了一个单独的 AudioFunctions 类来完成所有这些过程,如下所示。
class AudioFunctions{
FlutterAudioQuery audioQuery;
AudioPlayer audioPlayer;
List<SongInfo> songs;
AudioFunctions(){
this.audioQuery = FlutterAudioQuery();
this.audioPlayer = AudioPlayer();
this.songs = [];
}
getLocalSongs() async => this.songs = await audioQuery.getSongs();
String optimiseSongTitles(int index){
String songTitle = '';
if (this.songs[index].displayName.contains('-')){
songTitle = this.songs[index].displayName.split('-')[0];
}
else if(this.songs[index].displayName.contains('_')){
songTitle = this.songs[index].displayName.split('_')[0];
}
return songTitle;
}
void playLocalSong(String path){
audioPlayer.play(path,isLocal: true,);
}
void pauseLocalSong(){
audioPlayer.pause();
}
Stream<Duration> getLength() {
return audioPlayer.onDurationChanged;
}
Stream<Duration> getPosition() {
return audioPlayer.onAudioPositionChanged;
}
Future<int> changeSlider(Duration d){
return audioPlayer.seek(d);
}
}
现在我可以访问此类以检索相关数据?。
运行getLocalSongs
将所有本地歌曲的列表保存到该类的songs
变量中。但是,每次创建AudioFunctions对象时,都必须运行此程序。因此,在每个屏幕上。?
我应该使用单例还是提供者?由于我是新手,所以我不知道如何使用它们中的任何一个,并且怀疑是否可以在provider中使用对象。?
表达爱意?并帮助菜鸟
答案 0 :(得分:1)
我认为单例是一个不错的选择,因为您可能不想在每个页面上再次调用AudioPlayer()。
class AudioFunctions {
static AudioFunctions _instance = AudioFunctions._();
FlutterAudioQuery audioQuery;
AudioPlayer audioPlayer;
List<SongInfo> songs;
static AudioFunctions get instance => _instance;
AudioFunctions._() {
this.audioQuery = FlutterAudioQuery();
this.audioPlayer = AudioPlayer();
this.songs = [];
}
getLocalSongs() async => this.songs = await audioQuery.getSongs();
}
要立即访问AudioFunctions,您可以调用AudioFunctions.instance
。
我已将您的构造函数更改为AudioFunctions._()
,以便不能再在文件外部调用它。