哪个效率高? Flutter StreamBuilder Widget 与 Stream.Listen() 与 setState()

Which is efficient? Flutter StreamBuilder Widget vs Stream.Listen() with setState()

我正在写一个持续时间为 1 秒的周期性流来显示时间:

stream: Stream.periodic(Duration(seconds: 1)),
builder: (context, snapshot) {
  return Text(DateTime.now().toString());
}

此外,我可以通过以下方式实现同​​样的效果:

Stream.periodic(Duration(seconds: 1)).listen((){
setState(){});

还有。

不知哪种方法效率更高?
流生成器返回单个小部件或在其他情况下返回小部件树每秒。虽然 setState() 在我的案例中重建了整个应用程序小部件树。我在这里很困惑。请指教

我认为第一种方法更有效因为当事件到来时它只会触发该流的构建。

但是调用 setState() 将重建有状态小部件的整个小部件树..所以它花费更多

setState 不会重建整个应用程序小部件树。您提到的两种方法(StreamBuilder 和 Stream.listen)只要有新事件就会重建自身及其后代。

如果你的整个应用程序都在一个大的 build 方法下,那么 setState 将触发重建它所在的任何 build 方法。如果是这种情况,您应该出于性能原因拆分代码。

您的用例实际上在 official StatefulWidget docs 中提到。

Push the state to the leaves. For example, if your page has a ticking clock, rather than putting the state at the top of the page and rebuilding the entire page each time the clock ticks, create a dedicated clock widget that only updates itself.

此外,您始终可以利用 devtools 来衡量任何性能差异。