我一直希望将自己的窗口小部件Stateless
改为Stateful
,以提高性能。在某些情况下(例如更新BottomNavigationBar
索引)notifyListeners()
可以提供与setState()
相同的功能。
首先,我认为notifyListener()
的级别较低,与setState()
相比,其基本功能更为强大,因此应该更有效。由于setState()
方法可能会触发太多高级framework
方法,因此可能会花费更多的CPU能力。
但是,如果不进行适当而详细的性能测试,就很难确定。那答案是什么?
编辑:另外,在某些情况下,notifyListeners()
的行为与setState()
完全相同。例如,我在Text
内有StatelessWidget
小部件,其中拥有Random
值,当我在Class中通知不相关的值时,Text
小部件也正在更新。那么,有什么区别?
答案 0 :(得分:3)
假设您要比较ChangeNotifier.notifyListener
和State.setState
来重建小部件树,然后:
setState
将永远赢。
notifyListener
之所以重新构建窗口小部件树,是因为其本身导致setState
。
要使notifyListener
工作,通常在树中的某个位置StatefulWidget
处执行以下操作:
class MyState extends State<T> {
ChangeNotifier notifier;
initState() {
notifier.addListener(() => setState(() {}));
}
}
无论如何,这可能无关紧要。