Flutter 作用域_模型/提供包的目的(如果内置状态管理有效)

Flutter 作用域_模型/提供包的目的(如果内置状态管理有效),flutter,Flutter,新的颤振,所以请原谅这个问题 我正在玩弄使用有状态小部件管理整个应用程序的状态(变量/对象)的需要——这有点麻烦,但我得到了方法 我看到有一些软件包提供类似的功能(scoped_model和provide)-这些软件包给组合带来了什么,解决了什么问题?在开始一种特定的方法之前,我想我要问的是,经验丰富的颤振开发人员在使用什么,为什么 谢谢这主要是关于应用程序的可伸缩性和性能。使用StatefulWidget对于小型应用程序来说是不错的,但是想象一下,如果你有一个深度为30的小部件树,并且只有两个

新的颤振,所以请原谅这个问题

我正在玩弄使用有状态小部件管理整个应用程序的状态(变量/对象)的需要——这有点麻烦,但我得到了方法

我看到有一些软件包提供类似的功能(
scoped_model
provide
)-这些软件包给组合带来了什么,解决了什么问题?在开始一种特定的方法之前,我想我要问的是,经验丰富的颤振开发人员在使用什么,为什么


谢谢

这主要是关于应用程序的可伸缩性和性能。使用StatefulWidget对于小型应用程序来说是不错的,但是想象一下,如果你有一个深度为30的小部件树,并且只有两个叶子小部件需要知道一些
计数器
值,它们都位于小部件树的两端。使用
StatefulWidget
方法,您必须将该值放在树的顶部,并将其向下传递到整个树中,以便两个小部件可以获得它。然后,过一段时间,您需要在树的一个完全不相关的分支中使用另一个小部件来获取
计数器
——现在您需要修改整个分支,以便也传递值。然后,稍后,您决定将其中一个原始叶子移动到另一个地方-同样,您必须修改整个代码库以适应该情况

使用
InheritedWidget
使
provider
scoped_model
都可以使用,相反,您可以只在树的顶部插入
计数器
,让需要它的小部件使用
消费者
作用域_模型
从其
上下文
中提取值。这还将解决另一个问题:既然中间小部件都不知道计数器的相关信息,那么当值发生变化时,它们就不再需要重新构建。现在,您可以随意移动小部件,添加/删除对
计数器的依赖项,而不必在这样做时弄乱不相关的小部件


您甚至可以进一步使用
bloc
s。我记得读过一篇文章,比较了所有的方法,发现
bloc
s可以通过消除一些构建来进一步提高应用程序的性能,尽管一开始理解
bloc
模式中发生的事情可能有点令人畏惧。

主要是关于应用程序的可伸缩性和性能。使用StatefulWidget对于小型应用程序来说是不错的,但是想象一下,如果你有一个深度为30的小部件树,并且只有两个叶子小部件需要知道一些
计数器
值,它们都位于小部件树的两端。使用
StatefulWidget
方法,您必须将该值放在树的顶部,并将其向下传递到整个树中,以便两个小部件可以获得它。然后,过一段时间,您需要在树的一个完全不相关的分支中使用另一个小部件来获取
计数器
——现在您需要修改整个分支,以便也传递值。然后,稍后,您决定将其中一个原始叶子移动到另一个地方-同样,您必须修改整个代码库以适应该情况

使用
InheritedWidget
使
provider
scoped_model
都可以使用,相反,您可以只在树的顶部插入
计数器
,让需要它的小部件使用
消费者
作用域_模型
从其
上下文
中提取值。这还将解决另一个问题:既然中间小部件都不知道计数器的相关信息,那么当值发生变化时,它们就不再需要重新构建。现在,您可以随意移动小部件,添加/删除对
计数器的依赖项,而不必在这样做时弄乱不相关的小部件


您甚至可以进一步使用
bloc
s。我记得读过一篇文章,比较了所有的方法,发现
bloc
s可以通过消除一些构建来进一步提高应用程序的性能,尽管一开始理解
bloc
模式中发生的事情可能有点令人畏惧。

仅使用StatefulWidget并不坏。 您不必使用provider/scoped_模型

默认情况下,StatefulWidgets非常强大且可扩展

它们的缺点是:

  • 它们非常冗长
  • 在有状态的小部件之间重用有状态逻辑是困难的(尽管有它的变体,如flatter_hooks)
  • 重构可能是痛苦的
这些都是InheritedWidgets解决的问题,提供者/作用域_模型也是如此

但正如你所看到的,这些主要是生活质量问题。
如果您可以支持它们,那么只使用StatefulWidget就可以了

仅使用StatefulWidget并不坏。 您不必使用provider/scoped_模型

默认情况下,StatefulWidgets非常强大且可扩展

它们的缺点是:

  • 它们非常冗长
  • 在有状态的小部件之间重用有状态逻辑是困难的(尽管有它的变体,如flatter_hooks)
  • 重构可能是痛苦的
这些都是InheritedWidgets解决的问题,提供者/作用域_模型也是如此

但正如你所看到的,这些主要是生活质量问题。
如果您可以支持它们,那么只使用StatefulWidget就可以了

有一些关于这方面的文章,比如:有一些关于这方面的文章,比如:事实并非如此。有很多方法可以避免这个问题。例如,传递ValueListenable而不是直接传递值agreed,您肯定可以让StatefulWidgets运行良好。但是,在这个问题的背景下,正如OP所说,它们是Flutter开发的新手,所以我只是假设它们按原样传递值,在这种情况下,使用StatefulWidgets可能会妨碍应用程序的性能