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

标签 flutter dart

我一直致力于让我的小部件无状态而不是有状态以获得性能优势。在某些情况下(例如更新 BottomNavigationBar 索引)notifyListeners() 可以提供与 setState() 相同的功能。

起初,我认为 notifyListener()setState() 更底层,更基础的功能,因此它应该更高效。因为 setState() 方法可能会触发太多更高级别的 framework 方法,所以它可能会消耗更多的 CPU power。

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

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

最佳答案

假设您将 ChangeNotifier.notifyListenerState.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/

相关文章:

rest - 为什么flutter拒绝在本地主机上连接:8000 or 127. 0.01 :8000?

flutter - 单击后如何使CircleAvatar更改颜色?

flutter - 从Cloud FireStore提取字符串类型的数据

flutter - 单击后如何禁用onTap

dart - 在 Flutter 中检索图像路由

dart - 计算值不为null的对象的列表

performance - 原始类型 HashSet 或 HashMap 比 Object 快 10 倍?

class - Flutter中的颜色和颜色类

ios - 运行 add2app ios 时使用本地 flutter 引擎

flutter - Dart 中相对导入的正确代码风格是什么?