最近我开始使用StreamBuilders
和ValueListenableBuilder
,而不是使用setState
重建整个树。这让我想知道在“可变”StatelessWidget
而不是StatefulWidget
中使用这些状态机制是否会提高性能。
尽管如此,我一直在对重建和调用者进行一些测试,以评估在类上提升这些状态(使用StatefulWidget
和可变StatelessWidget
)和将调用者放在(Stream|ValueListenable)Builder
中(在不可变StatelessWidget
上)是否有区别,但得出的结论是,它们调用的时间完全相同,重建的方式也完全相同。
我知道如果小部件本身嵌套在另一个改变其状态的(Stream|ValueListenable)Builder
下,情况就不会如此,但我想知道依赖于在其生存期内不调用setState
的StatefulWidget
和依赖于由于提升而不能在其构造函数中具有const
的StatelessWidget
之间是否有区别。(根据性能最佳实践,第2点第3分:https://docs.flutter.dev/perf/best-practices)
TLDR:选择一个不能在其构造函数中包含const
的StatelessWidget
,而不是不调用setState
的StatefulWidget
,有什么好处吗?
例如:https://gitlab.com/-/snippets/2531761
1条答案
按热度按时间2uluyalo1#
经过不断的分析和折腾,我得出的结论是,这两种方法之间没有明显的区别。出于风格上的考虑,每当需要使用提升的非常量变量时,最好使用
StatefulWidget
。