надеюсь, что у вас все хорошо, #stayhome и сохраняйте #socialdistancing:)
У меня небольшая проблема с библиотекой flutter_blo c, и я надеюсь, что кто-то может мне помочь.
У меня есть 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 ожидал или, вернее, у меня sh будет следующий вывод
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)