Flutter:为什么 Provider 比只有静态单例的名为 AppGlobal 的类更好?



根据我对颤振包的理解,Provider,它是一种在小部件之间共享对象的方式。我知道另一种方法是创建一个类,比如AppGlobal,并定义整个应用程序可以使用的各种static变量。有人建议Provider是更好的方法,但我不明白为什么会这样。

对这个问题的回答应该考虑不同的方面:

  1. 可测试性 - 差别不大。两种情况都需要代码 更改为替换单例本身或"提供 单例">
  2. 代码耦合 - 也没有太大区别(见评论 可测试性(
  3. 范围界定 - 单例通常贯穿整个生命周期 应用。对于某些人来说,管理单例很容易出错 小部件子树。在这里,供应商绝对有其优势,通过照顾 创建和处置。
  4. UI 更新 - 使用单例时,必须完全手动编码setState将产生许多容易出错的样板代码。 提供者已经在引擎盖下提供了这个。
  5. 侦听器 - 更改应用程序一部分的状态应 通知该状态的所有使用者。对于单例,这必须手工构建。 提供者已经在引擎盖下提供了这个。
  6. 延迟加载 - 默认情况下,值是延迟加载的,这意味着在第一次读取值时调用它们,而不是在第一次创建提供程序时调用它们。这可以通过lazy: false禁用

希望这更深入地回答了这个问题。

通过 Web 快速搜索,似乎变量的全局实例不是最好的主意,因为它不可测试,并且它使代码与 AppGlobal 类非常耦合

这是一个链接,描述了我在说什么,它通过示例做得很好。

全局访问与使用提供程序的作用域访问

最新更新