希望大家都过得很好,并且#stayhome并保持#socialdistancing:)
我的 flutter_bloc 库确实有一个小问题,我希望有人可以帮助我。
我有一个API调用(moviesStream
),它返回一个流。
我想拥有的是:在该流中的每个yield
上在我的yield
中做一个bloc
,因此,请重新构建每个项目的小部件,而不是在所有{{1} }。我想一个接一个地构建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)
答案 0 :(得分:0)
我认为发生这种情况是因为您使用的是已经充满了数据的流,因此它不会浪费时间传递数据,因此您只会得到最后一个值。
如果要检查,则在产生状态之前添加以下行。
await Future.delayed(Duration(seconds: 1));