哪个效率高? 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 来衡量任何性能差异。
我正在写一个持续时间为 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 来衡量任何性能差异。