Почему StreamBuilder использует initialData несколько раз, а не последний снимок?
Я, наверное, просто неправильно понимаю поток дротика, но когда я это сделаю:
TabBarView(
children: [
...
StreamBuilder(
builder(context, url){
...
print(url);
...
},
stream: () async* { ... }().asBroadcastStream(),
initialData: 'Dope',
)
...
]
)
Я получаю странное поведение при рендеринге StreamBuilder с помощью TabBarView.
Во-первых, я должен использовать asBroadcastStream(), иначе я получу:
Плохое состояние: поток уже прослушан
что я признаю, это плохое решение.
Но пока решение работает, возврат к StreamBuilder в TabBarView теперь будет перестраивать повторное использование initialData, а не последнего моментального снимка потока. Вот результат печати при двойном возврате на вкладку:
I/flutter (14541): допинг
I/ флаттер (14541): правильный URL-адрес
I/flutter (14541): допинг
I/ флаттер (14541): допинг
Я представляю, что обе проблемы связаны, но я не понимаю, почему StreamBuilder повторно использует async* и initialData
1 ответ
Вероятно, ваш виджет воссоздается, преобразуйте его в StatefulWidget
и переопределить dispose()
с print(disposed)
внутри, чтобы подтвердить.
Также внутри StreamBuilder
распечатать snapshot.connectionState
, твой connectionState
is probably changing to waiting
to active
and so the builder is being called with initalData
.
This is what I can guess for the little of code you posted, test this out and let me know how it goes.