我一直致力于让我的小部件无状态
而不是有状态
以获得性能优势。在某些情况下(例如更新 BottomNavigationBar
索引)notifyListeners()
可以提供与 setState()
相同的功能。
起初,我认为 notifyListener()
比 setState()
更底层,更基础的功能,因此它应该更高效。因为 setState()
方法可能会触发太多更高级别的 framework
方法,所以它可能会消耗更多的 CPU power。
但如果不进行适当和详细的性能测试,就很难确定。那么答案是什么?
编辑:此外,在某些情况下,notifyListeners()
的行为与 setState()
完全相同。例如,我在 StatelessWidget
中有一个 Text
小部件,它包含一个 Random
值,当我在类中通知一个不相关的值时, Text
小部件也正在更新。那么,有什么区别呢?
最佳答案
假设您将 ChangeNotifier.notifyListener
与 State.setState
进行比较以重建小部件树,那么:
setState
将永远获胜。
notifyListener
重建您的小部件树的原因是它会导致 setState
本身。
要使 notifyListener
正常工作,通常在您的树中某处有一个 StatefulWidget
执行以下操作:
class MyState extends State<T> {
ChangeNotifier notifier;
initState() {
notifier.addListener(() => setState(() {}));
}
}
无论如何,这可能并不重要。
关于flutter - setState() vs notifyListeners(),哪个效率更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56932355/