1分钟
09 StreamBuilder
如下代码所示, 在 Flutter 中通过 StreamBuilder
构建 Widget ,只需提供一个 Stream
实例即可,其中 AsyncSnapshot
对象为数据快照,通过 data
缓存了当前数据和状态,那 StreamBuilder
是如何与 Stream
关联起来的呢?
StreamBuilder<List<String>>(
stream: dataStream,
initialData: ["none"],
///这里的 snapshot 是数据快照的意思
builder: (BuildContext context, AsyncSnapshot<List<String>> snapshot) {
///获取到数据,为所欲为的更新 UI
var data = snapshot.data;
return Container();
});
如上图所示, StreamBuilder
的调用逻辑主要在 _StreamBuilderBaseState
中,_StreamBuilderBaseState
在 initState
、didUpdateWidget
中会调用 _subscribe
方法,从而调用 Stream
的 listen
,然后通过 setState
更新UI,就是这么简单有木有?
我们常用的
setState
中其实是调用了markNeedsBuild
,markNeedsBuild
内部标记element
为diry
,然后在下一帧WidgetsBinding.drawFrame
才会被绘制,这可以看出setState
并不是立即生效的哦。
学员评价