setState()vs notifyListeners(),哪一个效率更高?

时间:2019-07-08 09:50:52

标签: flutter dart

我一直希望将自己的窗口小部件Stateless改为Stateful,以提高性能。在某些情况下(例如更新BottomNavigationBar索引)notifyListeners()可以提供与setState()相同的功能。

首先,我认为notifyListener()的级别较低,与setState()相比,其基本功能更为强大,因此应该更有效。由于setState()方法可能会触发太多高级framework方法,因此可能会花费更多的CPU能力。

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

编辑:另外,在某些情况下,notifyListeners()的行为与setState()完全相同。例如,我在Text内有StatelessWidget小部件,其中拥有Random值,当我在Class中通知不相关的值时,Text小部件也正在更新。那么,有什么区别?

1 个答案:

答案 0 :(得分:3)

假设您要比较ChangeNotifier.notifyListenerState.setState来重建小部件树,然后:

setState将永远赢。

notifyListener之所以重新构建窗口小部件树,是因为其本身导致setState

要使notifyListener工作,通常在树中的某个位置StatefulWidget处执行以下操作:

class MyState extends State<T> {
  ChangeNotifier notifier;

  initState() {
    notifier.addListener(() => setState(() {}));
  }
}

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