Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在streamBuilder中使用提供程序_Flutter_Dart - Fatal编程技术网

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();
  }
}