从自己的流中获得的每件物品扑动的块产量

问题描述 投票:0回答:1

希望大家都过得很好,请#stayhome并保持#socialdistancing:)

我在flutter_bloc库中确实有一个小问题,希望有人可以帮助我。

我有一个API调用(moviesStream),它返回一个流。我想拥有的是:在该流中的每个yield上都在我的yield中执行一个bloc,并因此针对每个项目而不是对所有items都重新构建我的小部件。我要一个接一个地依次构建items

这是我的方法,我不明白为什么它不起作用。我非常乐意采用其他任何方法来实现自己的目标

到目前为止,我学到的是:我无法产生相同的状态,但是我的新旧状态是不同的,所以这应该不是问题(我认为)。产生收益后,我是否需要分派/添加新事件(或再次添加)?我了解这也许可以解决我的问题,但是那会从头开始重新开始我的视频流,不是吗?

Stream<FilmeState> mapEventToState(FilmeEvent event) async* {
    final currentState = state;

    yield FilmeStateUninitialized();

    if (event is FilmeEventLoad)
    {
      yield FilmeStateLoadedV2(items: []);

      var moviesStream = Stream.fromIterable([{"1":"1"}, {"2":"2"}, {"3":"3"}]);
      await for (var value in moviesStream) {

        var newItems = List<Map<String, dynamic>>.from((state as FilmeStateLoadedV2).items);
        newItems.add(value);
        print("newItems.length=${newItems.length}");
        yield FilmeStateLoadedV2(items: newItems);
      }
}

输出如下

I/flutter (12087): state=Instance of 'FilmeStateUninitialized' // this comes from my widget (BlocBuilder)
I/flutter (12087): newItems.length=1
I/flutter (12087): newItems.length=2
I/flutter (12087): newItems.length=3
I/flutter (12087): state=Instance of 'FilmeStateLoadedV2' // this comes from my widget (BlocBuilder)

我期望或者更希望获得以下输出

I/flutter (12087): state=Instance of 'FilmeStateUninitialized' // this comes from my widget (BlocBuilder)
I/flutter (12087): newItems.length=1
I/flutter (12087): state=Instance of 'FilmeStateLoadedV2' // this comes from my widget (BlocBuilder)
I/flutter (12087): newItems.length=2
I/flutter (12087): state=Instance of 'FilmeStateLoadedV2' // this comes from my widget (BlocBuilder)
I/flutter (12087): newItems.length=3
I/flutter (12087): state=Instance of 'FilmeStateLoadedV2' // this comes from my widget (BlocBuilder)
flutter dart stream bloc flutter-bloc
1个回答
0
投票

我认为发生这种情况是因为您使用的是已经充满了数据的流,因此它没有增加传递数据的时间,因此您只会获得最后的值。

如果要检查,请在屈服状态之前添加以下行。

 await Future.delayed(Duration(seconds: 1));
© www.soinside.com 2019 - 2024. All rights reserved.