【问题标题】:StreamBuilder doesn't rebuilds after stream changed by setState在 setState 更改流后,StreamBuilder 不会重建
【发布时间】:2019-08-14 16:45:57
【问题描述】:

我有一个 StatefulWidget,其中有一个名为 stream 的变量,它被初始化为一个初始流:

var stream = stream1;

当 setState 被调用时:

setState(() {
 condition ? stream = stream1 : stream = stream2;
});

这些流由 StreamBuilder 使用:

StreamBuilder(
 stream: stream,
 builder: (context, snap) {
  return RaisedButton(
   child: ..
   onPressed: snap.hasData ? () => my_function() : null
  );
 }
)

问题在于,当构建器函数通过流获取数据并且按钮变为可单击然后状态发生更改时,新的 StreamBuilder 按钮仍然可单击,尽管如果单击按钮 my_function,第二个流实际上没有数据() 没有被执行。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    问题实际上不是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
    

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 2020-03-26
      • 2021-10-27
      • 2019-10-10
      • 2019-08-19
      • 1970-01-01
      • 2018-02-06
      • 2022-01-06
      • 1970-01-01
      相关资源
      最近更新 更多