为什么StreamBuilder会多次使用initialData而不是最新快照?

时间:2020-03-31 03:52:10

标签: flutter dart stream-builder dart-stream

我可能只是误解了飞镖的流程,但是当我这样做时:

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

使用TabBarView渲染StreamBuilder时,会出现一些奇怪的行为。

首先,我必须使用 asBroadcastStream(),否则会得到一个:

状态不良:流已经被收听

我承认这是一个糟糕的解决方案。

但是,在解决方案起作用的同时,回到TabBarView中的StreamBuilder现在将重新使用initialData而不是流的最新快照来重建。这是两次返回标签时的打印输出:

I / flutter(14541):涂料
I / flutter(14541):properURL
I / flutter(14541):涂料
I / flutter(14541):涂料

我认为这两个问题都相关,但是我不明白为什么StreamBuilder会重用async *和initialData

1 个答案:

答案 0 :(得分:0)

可能是在重新创建窗口小部件,将其转换为StatefulWidget,并在其中包含dispose()的{​​{1}}进行确认。

此外,在print(disposed)打印StreamBuilder内,您的snapshot.connectionState可能从connectionState更改为waiting,因此使用{ {1}}。

对于您发布的少量代码,我可以猜测一下,对其进行测试,然后让我知道它的运行方式。