ValueNotifier
可以与一个或多个 ValueListenableBuilder
结合使用以管理状态并简化UI的开发。
但是,ValueNotifier
继承自 ChangeNotifier
,并且文档指出:
因此,据我了解,在同一通知程序上侦听多个ValueListenableBuilder
不是最佳实践。
另一方面,the official video presentation表示您可以同时更新许多小部件:
我的问题是:
ValueNotifier
/ ValueListenableBuilder
更好的东西吗? 最佳答案
关于通知的复杂性:
阅读source code for ChangeNotifier后,请查看notifyListeners
方法:在203
行上,执行for
循环,并为每次迭代调用_listeners.contains
。for
和contains
都具有O(N)复杂度,并且由于contains
在每次迭代中都被调用,因此您就有了为什么它是O(N²)。
我认为视频和文档之间没有矛盾。
当您需要根据ValueNotifier
的值更新几个小部件时,这种方法非常适合小情况。
对于更大的情况,您可以使用InheritedWidget
,我相信它即使在应用程序范围内也适用于公开值(请参见Theme,MediaQuery),也可以使用BLOC方法,该方法利用Dart流。
尽管进行了搜索,但没有找到有关建议方法的通知复杂性的特定信息。
我建议使用它们,因为我认为它们更适合复杂的场景,我可以通过我对它们的使用经验来支持。
通常,我将BLoC用于业务逻辑相关的状态管理,而将InheritedWidget(特别是provider package)用于UI相关的状态管理。
关于flutter - flut中的 “ValueNotifier”小部件适合 “ValueListenableBuilder” + “many”吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59519798/