是我错了吗,还是我们只想将值传递到Widget
树下,Provider
只是使用InheritedWidget
方法的dispose
吗?
答案 0 :(得分:2)
是的。提供程序确实主要是基于Inheritedwidgets的功能。
如果您想自己做,那就很好。但是您很快就会意识到,没有提供者,您将有数百条无用的重复行。
Provider基本上采用InheritedWidgets的逻辑,但是将样板减小到严格的最低限度。
答案 1 :(得分:1)
Provider
不是必须的,但应该。
首先,它得到flexible-powerful enough for almost every state-management
的正式支持。
总结一下InheritedWidget with dispose
可能是不正确的,因为Provider
有太多不同的用例,并且继承了一些其他地方可能找不到的优化。
例如,它可以很好地处理dispose
等情况下的automated providers
方法,因此,最好不要像使用dispose parameter
那样缩小效率,它还可以处理一些隐式处理。
另一个示例,如果您在大型应用程序中使用InheritedWidget
,则build
方法将始终执行整个程序。但是使用Provider
,您将拥有Consumer Widget
,它可以非常具体地控制build
方法的特定块,因此您可以提高效率。因此,最后,尤其是在大型项目中,您将看到使用Provider
的巨大好处。
问题在于,因为Flutter最初的意图是UI Framework
,默认情况下,我们没有足够灵活,功能强大的状态管理解决方案。
最后,由于您需要针对不同项目的不同状态管理解决方案,因此一种适用于所有人的方案是无价之宝。