Почему StreamBuilder несколько раз использует initialData, а не последний снимок? - PullRequest
0 голосов
/ 31 марта 2020

Я, вероятно, просто неправильно понимаю поток дротика, но когда я делаю это:

TabBarView(
  children: [
    ...
    StreamBuilder(
      builder(context, url){ 
        ...
        print(url);
        ...
      },
      stream: () async* { ... }().asBroadcastStream(),
      initialData: 'Dope',
    )
    ...
  ]
)

Я получаю некоторые странные поведения при рендеринге StreamBuilder с использованием TabBarView.

Сначала я должен используйте asBroadcastStream () в противном случае я получаю:

Плохое состояние: поток уже прослушан

, который, как я признаю, является плохим решением.

Но пока решение работает, возврат к StreamBuilder в TabBarView теперь перестроит повторное использование initialData, а не последний снимок потока. Вот результат печати при возврате к вкладке дважды:

I / флаттер (14541): допинг
I / флаттер (14541): ProperURL
I / флаттер (14541) : dope
I / flutter (14541): dope

I image Обе проблемы связаны, но я не понимаю, почему StreamBuilder повторно использует asyn c* и initialData

1 Ответ

0 голосов
/ 31 марта 2020

Возможно, ваш виджет воссоздается, преобразуйте его в StatefulWidget и переопределите dispose() с print(disposed) внутри для подтверждения.

Также внутри StreamBuilder выведите snapshot.connectionState, ваш connectionState, вероятно, меняется на waiting на active, поэтому сборщик вызывается с initalData.

Это то, что я могу догадаться из-за небольшого количества кода, который вы опубликовали, тестируйте это и дайте мне знать, как оно идет.

...