setState() 和 notifyListeners(),哪个更高效?

Ese*_*met 4 dart flutter

我一直致力于制作我的小部件,Stateless而不是Stateful为了性能优势。在某些情况下(BottomNavigationBar例如更新索引)notifyListeners()可以提供与setState().

起初,我认为notifyListener()与 相比setState(),它的级别较低,功能更基本,因此应该更高效。因为setState()方法可能会触发太多更高级别的framework方法,所以可能会消耗更多的 CPU 能力。

但是如果不进行适当和详细的性能测试,就很难确定。所以答案是什么?

编辑:此外,在某些情况下,notifyListeners()行为与setState(). 例如,我Text在 aStatelessWidget中有一个小部件,它包含一个Random值,当我通知 Class 中的一个不相关的值时,Text小部件也会得到更新。那么区别是什么呢?

Rém*_*let 10

假设您正在ChangeNotifier.notifyListenerState.setState重建小部件树进行比较,则:

setState 总会赢的。

原因是notifyListener重建您的小部件树,因为它会导致setState自身。

为了notifyListener工作,StatefulWidget您的树中通常有一个执行以下操作的地方:

class MyState extends State<T> {
  ChangeNotifier notifier;

  initState() {
    notifier.addListener(() => setState(() {}));
  }
}
Run Code Online (Sandbox Code Playgroud)

无论如何,这可能无关紧要。