gpt4 book ai didi

flutter - 什么时候使用 ChangeNotifier?

转载 作者:行者123 更新时间:2023-12-01 23:59:34 27 4
gpt4 key购买 nike

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

Cart model Catalog model

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

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

我的想法对吗?

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

最佳答案

是的,你是对的。

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

enter image description here

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

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

ChangeNotifiers 用于我们需要提升状态的场景,如文档所述 here或者当您需要无法直接提供的树深处的值时,您可以使用它。 在 React 的情况下,我们称之为 props drilling。将状态赋予树中的子小部件。

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

关于flutter - 什么时候使用 ChangeNotifier?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62098896/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com