在解释如何使用提供程序包的flutter sample中,有两个模型:目录和模型。对于Catalog模型,不使用ChangeNotifier,但对于购物车模型,则使用它。
为什么购物车模型使用ChangeNotifier而不是目录模型?
我的想法是购物车模型依赖于外部的更改(在目录模型中)。目录模型是硬编码的,因此不需要通知任何人更改。
我的想法正确吗?
PS:这是我的第一个应用,当涉及到状态管理时,我是一个完全的新手。
发布于 2020-05-30 15:45:57
是的,你是对的。
顾名思义,ChangeNotifier代表通知更改。正如您所看到的,在catalog调用的函数notifyListners()和add函数用于通过Consumer小部件或Consumer.of()通知订阅通知程序的侦听器。那么什么时候使用ChangeNotifiers呢?当模型中存在依赖于树中其他视图的状态更改时,您可以使用then,而您无法直接访问这些视图。

因此,从这个小部件树中,您可以清楚地看到,MyCatalog和MyCart在UI中完全不同,但在逻辑上是相关的。即,每当用户更改MyListItem时,您都需要通知购物车小部件。
对于这种情况,一种可能的解决方案是使用全局变量(某种程度上),或者使用位于树中MyCatalog和MyCart顶部的变量。因此,当MyCatalog更改状态时,树顶部的ChangeNotifier将知道更改,并通知正在侦听更改的MyCart。
ChangeNotifiers用于这样的场景中,我们需要像文档中所说的那样提升状态,或者当您需要树中不能直接给出的值时,您可以使用它。In case of react we call it props drilling。将状态提供给树中的子小部件。
如果我没有错的话,我们可以在不使用提供者的情况下实现这一点。使MyApp成为statefull小部件,并将状态传递给MyCatalog和MyCart小部件。这样渲染器就会知道从哪里获取状态。但是,如果您添加了另一个依赖于树中深层状态的小部件,会怎么样呢?你能把这个州传下去吗?或者,你会使用提供者吗?一切都取决于您和您的应用程序。
https://stackoverflow.com/questions/62098896
复制相似问题