[英]Using singleton vs provider in Flutter?
我正在flutter開發音樂播放器應用程序。我正在使用音頻播放器插件來獲取所有 mp3 文件並播放音樂。 我創建了一個單獨的AudioFunctions class 來完成所有這些過程,如下所示。
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);
}
}
現在我可以訪問這個 class 來檢索相關數據。 運行getLocalSongs
會將所有本地歌曲的列表保存到 class 中的songs
變量中。但是,每次創建 AudioFunctions 的 object 時,我都必須運行它。 所以,在每個屏幕上。
我應該使用 singleton 還是提供商? 由於我是 flutter 的新手,我不知道如何使用它們中的任何一個,我懷疑我是否可以在提供程序中使用對象。
表現出一些愛並幫助一個菜鳥
我認為 singleton 在這里是一個不錯的選擇,因為您可能不想在每個頁面上再次調用 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._()
以便不再在文件外部調用它。
如果您想使用它來存儲需要從應用程序的不同區域訪問的全局 state,則將提供程序創建為 singleton 可能是有意義的。 通過這樣做,您可以在整個應用程序中訪問相同的提供程序實例,並且對提供程序的 state 的任何更改都將立即被應用程序的所有依賴區域看到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.