gpt4 book ai didi

flutter - "ValueNotifier"+ "ValueListenableBuilder"是否适用于 Flutter 中的 "many"小部件?

转载 作者:行者123 更新时间:2023-12-03 02:46:44 33 4
gpt4 key购买 nike

A ValueNotifier可以与一个或多个组合 ValueListenableBuilder管理状态并简化 UI 的开发。

但是,ValueNotifier 继承自 ChangeNotifier ,并且文档指出:

ChangeNotifier is optimized for small numbers (one or two) of listeners. It is O(N) for adding and removing listeners and O(N²) for dispatching notifications (where N is the number of listeners)

因此,据我所知,让多个 ValueListenableBuilder 监听同一个通知程序并不是最佳做法。

另一方面,the official video presentation相反,表示您可以同时更新多个小部件:

Many widgets

我的问题是:

  • 文档和视频之间是否存在矛盾?
  • 为什么通知是 O(N²) 而不是 O(N)?
  • 我应该使用比 ValueNotifier/ValueListenableBuilder 更好的东西吗?

最佳答案

关于通知的复杂度:

阅读source code for ChangeNotifier查看 notifyListeners 方法:在 203 行执行一个 for 循环,每次迭代 _listeners.contains 获取叫。

forcontains 都有 O(N) 的复杂度,并且由于 contains 在每次迭代时被调用,所以你知道为什么它是 O(N) (N²).

我认为视频和文档之间没有矛盾。这种方法非常适合小型情况,当您需要根据 ValueNotifier 的值更新几个小部件时。

对于更大的情况,您可以使用 InheritedWidget,我认为即使在应用程序范围的上下文中(请参阅 Theme、MediaQuery),它也适合公开值,或者您可以使用 BLoC 方法,它利用 Dart 流。

虽然我进行了搜索,但我没有找到有关建议方法的通知复杂性的具体信息。

我之所以推荐它们,是因为我认为它们更适合复杂的场景,而且我可以根据我使用它们的个人经验来支持这一点。

通常我使用 BLoC 进行业务逻辑相关的状态管理,使用 InheritedWidget(特别是 provider package )进行 UI 相关的状态管理。

关于flutter - "ValueNotifier"+ "ValueListenableBuilder"是否适用于 Flutter 中的 "many"小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59519798/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com