【问题标题】:When to use ChangeNotifier?何时使用 ChangeNotifier?
【发布时间】:2020-09-17 18:52:57
【问题描述】:

flutter sample解释如何使用Provider包中,有两个模型,Catalog和Model。 对于 Catalog 模型,不使用 ChangeNotifier,但对于 Cart 模型,它使用它。

Cart model Catalog model

为什么将 ChangeNotifier 用于 Cart 模型而不是 Catalog 模型?

我的想法是 Cart 模型依赖于外部的变化(在目录模型中)。 目录模型是硬编码的,因此无需通知任何人更改。

我的想法对吗?

PS:这是我的第一个应用程序,在状态管理方面我完全是个菜鸟。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    是的,你是对的。

    顾名思义,ChangeNotifier 代表通知更改。如您所见,在catalogadd 中调用的函数notifyListners() 用于通知使用Consumer 小部件或使用Consumer.of() 订阅通知程序的侦听器。那么什么时候使用ChangeNotifiers?每当模型中的状态发生变化时,您都可以使用 then 依赖于树深处的某些其他视图,而您无法直接访问它们。

    因此,从这个小部件树中,您可以清楚地看到 MyCatalog 和 MyCart 在 UI 中彼此完全不同,但在逻辑上是相互依赖的。即,每当用户更改MyListItem 时,您需要通知购物车小部件。

    这种情况的一个可能解决方案是使用全局变量(某种)或位于树中 MyCatalog 和 MyCart 顶部的变量。这样当 MyCatalog 更改状态时,树顶部的 ChangeNotifier 会知道更改并通知正在侦听更改的 MyCart

    ChangeNotifiers 用于我们需要提升状态的情况,如文档所述 here 或者当您需要无法直接提供的树深处的值时,您可以使用它。 In case of react we call it props drilling。将状态赋予树中的子小部件。

    如果我没记错的话,我们可以在不使用提供程序的情况下实现这一点。使MyApp 成为一个有状态的小部件并将状态传递给MyCatalogMyCart 小部件。以便渲染器知道从中获取状态。但是,如果您添加了另一个依赖于树深处状态的小部件会怎样。你会把国家传下去吗?或者你会使用 Provider 吗?一切都取决于您和您的应用程序。

    【讨论】:

      猜你喜欢
      • 2020-02-07
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2021-04-10
      相关资源
      最近更新 更多