我一直致力于制作我的小部件,Stateless而不是Stateful为了性能优势。在某些情况下(BottomNavigationBar例如更新索引)notifyListeners()可以提供与setState().
起初,我认为notifyListener()与 相比setState(),它的级别较低,功能更基本,因此应该更高效。因为setState()方法可能会触发太多更高级别的framework方法,所以可能会消耗更多的 CPU 能力。
但是如果不进行适当和详细的性能测试,就很难确定。所以答案是什么?
编辑:此外,在某些情况下,notifyListeners()行为与setState(). 例如,我Text在 aStatelessWidget中有一个小部件,它包含一个Random值,当我通知 Class 中的一个不相关的值时,Text小部件也会得到更新。那么区别是什么呢?
Rém*_*let 10
假设您正在ChangeNotifier.notifyListener与State.setState重建小部件树进行比较,则:
setState 总会赢的。
原因是notifyListener重建您的小部件树,因为它会导致setState自身。
为了notifyListener工作,StatefulWidget您的树中通常有一个执行以下操作的地方:
class MyState extends State<T> {
ChangeNotifier notifier;
initState() {
notifier.addListener(() => setState(() {}));
}
}
Run Code Online (Sandbox Code Playgroud)
无论如何,这可能无关紧要。
| 归档时间: |
|
| 查看次数: |
2651 次 |
| 最近记录: |