我可能只是误解了飞镖的流程,但是当我这样做时:
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
答案 0 :(得分:0)
可能是在重新创建窗口小部件,将其转换为StatefulWidget
,并在其中包含dispose()
的{{1}}进行确认。
此外,在print(disposed)
打印StreamBuilder
内,您的snapshot.connectionState
可能从connectionState
更改为waiting
,因此使用{ {1}}。
对于您发布的少量代码,我可以猜测一下,对其进行测试,然后让我知道它的运行方式。