【发布时间】:2020-07-11 13:37:01
【问题描述】:
我可能只是误解了飞镖的流,但是当我这样做时:
TabBarView(
children: [
...
StreamBuilder(
builder(context, url){
...
print(url);
...
},
stream: () async* { ... }().asBroadcastStream(),
initialData: 'Dope',
)
...
]
)
我在使用 TabBarView 渲染 StreamBuilder 时遇到了一些奇怪的行为。
首先,我必须使用 asBroadcastStream() 否则我会得到:
Bad state: Stream 已经被监听
我承认这是一个糟糕的解决方案。
但是,虽然解决方案有效,但现在返回 TabBarView 中的 StreamBuilder 将重新使用 initialData 而不是流的最新快照来重建。这是两次返回选项卡时的打印输出:
I/flutter (14541):涂料
我/颤振(14541):正确的URL
我/颤振(14541):涂料
我/颤振(14541):涂料
我认为这两个问题都是相关的,但我不明白为什么 StreamBuilder 会重复使用 async* 和 initialData
【问题讨论】:
-
将 StreamBuilder 包装在 Builder 中解决了第二个问题,不知道为什么......
标签: flutter dart stream-builder dart-stream