我可能只是误解了飞镖的流,但是当我这样做时:
TabBarView(
children: [
...
StreamBuilder(
builder(context, url){
...
print(url);
...
},
stream: () async* { ... }().asBroadcastStream(),
initialData: 'Dope',
)
...
]
)
使用 TabBarView 渲染 StreamBuilder 时出现一些奇怪的行为。
首先,我必须使用asBroadcastStream()否则我会得到:
错误状态:Stream 已被收听
我承认这是一个糟糕的解决方案。
但是,虽然解决方案有效,但现在返回 TabBarView 中的 StreamBuilder 将重新使用 initialData 而不是流的最新快照来重建。这是两次返回选项卡时的打印输出:
I/flutter (14541):涂料
I/flutter (14541):正确的 URL
I/flutter (14541):涂料
I/flutter (14541):涂料
我认为这两个问题都是相关的,但我不明白为什么 StreamBuilder 重用 async* 和 initialData