【问题标题】:Provider vs. Get_it提供者与 Get_it
【发布时间】:2019-12-01 19:44:09
【问题描述】:

在寻找 Flutter 的依赖注入解决方案时,我发现了两个很棒的库:providerget_it

据我所知,provider 有更多样板,但它非常适合 Flutter,允许 Consumer 在注入值更改后重建 Widget 树的一部分。

另一方面,get_it 更直接,更易于使用,并且不依赖于 Flutter,因此可以与任何 Dart 代码一起使用。

它们之间是否还有更多的区别和限制?我知道这有点固执己见,但 Flutter 太新了,公开注册好处、副作用和陷阱是件好事。

【问题讨论】:

    标签: flutter dependency-injection service-locator flutter-provider


    【解决方案1】:

    两者的主要区别在于provider 不是严格的依赖注入

    通过使用小部件,provider 还能够:

    • 提供程序与 Flutter 开发工具兼容
    • 知道什么时候变量不能被访问(作用于树)
    • 知道何时创建和处置对象
    • 同步模型 -> 模型和模型 -> UI
    • 仅覆盖特定小部件树的某些值
    • 主动防止循环依赖

    所有这些都是可选的,但从长远来看对您的应用的健康有好处。

    它确保您始终保持最新状态,让“意大利面条代码”变得更加困难,并使您的不同元素更易于组合。

    【讨论】:

    • 有趣...#1 与 #4 有何不同?
    • 可以在不将模型限定为树的情况下实现防止循环依赖。例如,我们可以有一种全新的树,只为提供者制作。同样,对于#1,这还包括尝试在initStatedeactivate 中获取一个值,这可能会根据您的操作而抛出。
    • 我的意思是#4,“只为特定的小部件树覆盖一些值”,但我现在理解了这个例子。谢谢!
    • @Rémi-Rousselet 作为 Provider 的开发人员,您能否就使用 Get It 而不是 provider 提供一些见解?
    • get_it 让 c# 开发者更容易上手
    【解决方案2】:

    我只解释我实际发现的一个限制,可能还有其他限制。

    在搜索了许多关于 Get_it 的教程和主题之后,即使我们在提供程序中有依赖注入,为什么人们使用 Get_it(),我无法理解 DI 方面的区别。然后我陷入了一个场景,并找到了“有什么限制”这个问题的答案。

    它们之间还有什么区别和限制吗?

    场景:

    我有嵌套小部件,小部件 A 有小部件 B,小部件 B 有小部件 C,我正在使用提供程序,并且在值更改时访问每个小部件中的值。太好了,然后我制作了一个新的小部件 D,它是一个单独的小部件,它不在小部件 A 层次结构中。但是当我尝试访问 Widget D 中的相同值时,它并没有改变。因为 Widget D 不在 Widget A 的树中。现在来看看提供者依赖注入的限制。

    结论

    您将使用 Get_it 从树小部件中访问值。但是您无法访问 使用提供者更新值

    更新答案

    在上面的场景中,你需要用Provider包装应用程序来访问所有的依赖项。

    【讨论】:

    • 是的,provider 与小部件树一起工作,但大多数情况下,您可以在树的根部使用 Provider 注入对象,这样您的所有应用程序都可以读取这些依赖项。
    【解决方案3】:

    Get 它不是依赖注入解决方案,而是服务定位器。

    如果您想在一个类的两个或多个实现之间快速切换,它会很有用。例如模拟一项服务,并在“真实”服务或假服务之间进行切换(出于调试目的)。

    确实,它无法检索/提供对现有对象的引用(单例除外,但您可以自己做同样的事情而无需更多努力)并且只能提供新对象。

    【讨论】:

      【解决方案4】:

      通过各种教程的流式传输,我了解到 get it 包可以称为全局变量,可以从任何小部件访问任何小部件,无论是否嵌套 VS 提供程序只能在嵌套小部件之间访问。 该示例更好地解释为 阿尔斯兰汗

      【讨论】:

        猜你喜欢
        • 2013-02-06
        • 2019-12-01
        • 2019-12-02
        • 1970-01-01
        • 1970-01-01
        • 2020-09-28
        • 1970-01-01
        • 1970-01-01
        • 2015-03-20
        相关资源
        最近更新 更多