Flutter 开发实战

235课时
1K学过
8分

课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
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();
    });

img

如上图所示, StreamBuilder 的调用逻辑主要在 _StreamBuilderBaseState中,_StreamBuilderBaseStateinitStatedidUpdateWidget 中会调用 _subscribe 方法,从而调用 Streamlisten,然后通过 setState 更新UI,就是这么简单有木有?

我们常用的 setState 中其实是调用了 markNeedsBuildmarkNeedsBuild 内部标记 elementdiry ,然后在下一帧 WidgetsBinding.drawFrame 才会被绘制,这可以看出 setState 并不是立即生效的哦。