我有一个StatefulWidget,其中有一个名为stream的变量,它被初始化为初始流:
var stream = stream1;
调用setState时:
setState(() {
condition ? stream = stream1 : stream = stream2;
});
Thesee流由StreamBuilder使用:
StreamBuilder(
stream: stream,
builder: (context, snap) {
return RaisedButton(
child: ..
onPressed: snap.hasData ? () => my_function() : null
);
}
)
问题是,当构建器函数通过流获取数据并且按钮变为可单击状态,然后状态发生变化时,如果单击my_function按钮,则第二个流没有数据生效,新的StreamBuilder按钮仍可单击()未执行。
答案 0 :(得分:0)
问题实际上不是StreamBuilder
不重建,而是保留了最后发出的事件。
因此,您不能简单地检查snapshot.hasData
。您也必须检查snapshot.connectionState
。
StreamBuilder
收到新的流时,snapshot.connectionState
将重置为ConnectionState.waiting
,直到至少一个值被发出为止。
所以代替:
onPressed: snap.hasData ? () => my_function() : null
您可以这样做:
onPressed: snap.connectionState != ConnectionState.waiting && snap.hasData ? () => my_function() : null