提供程序与InheritedWidget

mFe*_*ein 2 flutter flutter-provider

我错了吗Widget,或者如果我们只想将值传递给树,那ProviderInheritedWidget带有dispose方法的吗?

Ese*_*met 8

Provider 不是必须的,而是应该的。

首先,它由 Flutter 团队推广,并且足够灵活以处理几乎所有状态管理解决方案。

InheritedWidgetwith可能不公平,dispose因为它Provider有太多不同的用例并继承了一些您可能在其他任何地方都找不到的优化。

如果您InheritedWidget在大型应用程序中使用,build方法总是重建整个构建方法。但是Provider有了Consumer小部件,它可以非常具体地控制特定的build方法块,因此您有更高的效率。侦听器的复杂性也低于 InheritedWidgets'(O(N) vs O(N²))。

问题在于,由于 Flutter 最初打算成为一个 UI 框架,因此默认的状态管理解决方案也是面向 UI 的。

最后,由于您将需要针对不同项目使用不同的状态管理模式,因此在 imo 中一个包万能方案是无价的。


Rém*_*let 5

是。提供程序确实主要是基于Inheritedwidgets的功能。

如果您想自己做,那很好。但是您很快就会意识到,没有提供者,您将有数百条无用的重复行。

提供程序基本上采用InheritedWidgets的逻辑,但是将样板降低到严格的最低限度。