如果内置状态管理有效,scoped_model / provide软件包的用途

时间:2019-11-27 07:38:51

标签: flutter

Flutter的新手,请原谅这个问题。

我需要使用Stateful小部件来管理整个应用程序中的状态(变量/对象),这有点麻烦,但是我知道方法了。

我看到有些软件包提供相似的功能(scoped_modelprovide)-这些软件包带来了什么,它们解决了什么问题?在开始一种特定方法之前,我想我想问的是经验丰富的Flutter开发人员正在使用什么,为什么?

谢谢

2 个答案:

答案 0 :(得分:0)

主要与应用程序的可伸缩性和性能有关。使用StatefulWidget对于小型应用程序来说是很好的选择,但请想象一下,如果您有一个深度为30的小部件树,并且只有2个叶小部件需要知道一些counter值,并且它们都位于小部件的相对两端树。使用StatefulWidget方法,您必须将值放置在树的顶部并将其传递到整棵树中,以便2个小部件都可以获取它。然后,过一会儿,您需要在树的一个完全不相关的分支中使用另一个小部件来获得counter-现在您需要修改整个分支以传递该值。然后,稍后,您决定将原始叶子之一移动到另一个位置-再次,您必须修改整个代码库以适应该情况。

使用InheritedWidget使得providerscoped_model都可以使用,您可以只在树的顶部注入counter并简单地提取需要它的小部件。使用context或等效的Consumerscoped_model获得的值。这也将解决另一个问题:现在,中间小部件都不了解counter,因此当值更改时,它们不再需要重建。现在,您可以随意移动窗口小部件,并根据需要添加/删除对counter的依赖性,而不会在这样做时弄乱无关的窗口小部件。

您甚至可以更进一步,使用bloc代替。我记得读过一篇比较所有方法的文章,发现bloc可以通过消除一些构建来进一步提高应用程序的性能,尽管了解bloc模式的运行可能有些艰巨首先。

答案 1 :(得分:0)

仅使用StatefulWidget还不错。。 您没有拥有使用provider / scoped_model。

StatefulWidgets功能非常强大,默认情况下可扩展。

它们的缺点是:

  • 他们很冗长
  • 很难在有状态的小部件之间重用有状态的逻辑(尽管有一些变体,例如flutter_hooks)
  • 重构可能很痛苦

这些是InheritedWidgets解决的问题,所以provider / scoped_model也是如此。

但是您可以看到,这些主要是生活质量问题。 如果可以支持它们,则仅使用StatefulWidget是可以的。