Flutter 在streamBuilder中使用提供程序
当我使用下面的代码时: 音频服务插件Flutter 在streamBuilder中使用提供程序,flutter,dart,Flutter,Dart,当我使用下面的代码时: 音频服务插件 StreamBuilder<ScreenState>( stream: Rx.combineLatest3<List<MediaItem>, MediaItem, PlaybackState, ScreenState>( AudioService.queueStre
StreamBuilder<ScreenState>(
stream: Rx.combineLatest3<List<MediaItem>, MediaItem,
PlaybackState, ScreenState>(
AudioService.queueStream,
AudioService.currentMediaItemStream,
AudioService.playbackStateStream,
(queue, mediaItem, playbackState) =>
ScreenState(queue, mediaItem, playbackState)),
builder: (context, snapshot) {
final screenState = snapshot.data;
return Consumer<AudioServiceSubscription>(
builder: (_, audioSubscription, ch) {
audioSubscription.setQueue(screenState?.queue);
audioSubscription.setMediaItem(screenState?.mediaItem);
audioSubscription
.setPlaybackState(screenState?.playbackState);
return ch;
},
child: _palyer(),
);
},
),
我的提供者类是
class AudioServiceSubscription with ChangeNotifier {
List<MediaItem> _queue;
MediaItem _mediaItem;
PlaybackState _playbackState;
List<MediaItem> get queue => _queue;
MediaItem get mediaItem => _mediaItem;
PlaybackState get playbackState => _playbackState;
BasicPlaybackState get basicPlaybackState =>
_playbackState?.basicState ?? BasicPlaybackState.none;
void setQueue(List<MediaItem> queue) {
_queue = queue;
notifyListeners();
}
void setMediaItem(MediaItem mediaItem) {
_mediaItem = mediaItem;
notifyListeners();
}
void setPlaybackState(PlaybackState playbackState) {
_playbackState = playbackState;
notifyListeners();
}
}
class AudioServiceSubscription与ChangeNotifier{
列表队列;
MediaItem _MediaItem;
播放后台状态(PlaybackState);;
列表获取队列=>\u队列;
MediaItem获取MediaItem=>\u MediaItem;
PlaybackState获取PlaybackState=>\u PlaybackState;
BasicLaybackState获取BasicLaybackState=>
_playbackState?.basicState??basicLaybackState.none;
void setQueue(列表队列){
_队列=队列;
notifyListeners();
}
作废setMediaItem(MediaItem MediaItem){
_mediaItem=mediaItem;
notifyListeners();
}
void setPlaybackState(PlaybackState PlaybackState){
_playbackState=playbackState;
notifyListeners();
}
}
我想我出错的原因是我们不能在streamBuilder的builder中使用provider
我不知道该怎么做才对 你能展示一下你的构建方法吗?我使用的方法和音频服务的例子一样:
https://github.com/ryanheise/audio_service/blob/master/example/lib/main.dart
但是我想将它们存储在我的provider类中,而不是第107-110行,以便在应用程序的其他路径中使用音频状态。您尝试过消费者吗?是的,我尝试过,但问题是存在的。我确信原因是我们不能在streamBuilder的builder中使用provider。但我找不到任何替代方案。如果我在AudioServiceSubscription中评论notifyListeners,问题可以解决,但这显然不是解决方案。
class AudioServiceSubscription with ChangeNotifier {
List<MediaItem> _queue;
MediaItem _mediaItem;
PlaybackState _playbackState;
List<MediaItem> get queue => _queue;
MediaItem get mediaItem => _mediaItem;
PlaybackState get playbackState => _playbackState;
BasicPlaybackState get basicPlaybackState =>
_playbackState?.basicState ?? BasicPlaybackState.none;
void setQueue(List<MediaItem> queue) {
_queue = queue;
notifyListeners();
}
void setMediaItem(MediaItem mediaItem) {
_mediaItem = mediaItem;
notifyListeners();
}
void setPlaybackState(PlaybackState playbackState) {
_playbackState = playbackState;
notifyListeners();
}
}