在寻找Flutter的依赖注入解决方案时,我发现了两个很棒的库:provider
和get_it
。
据我所知,provider
具有更多样板,但非常适合Flutter,允许Consumer
在注入值更改后重建Widget
树的一部分。
get_it
更直接,更易于使用并且不依赖Flutter,因此可以与任何Dart代码一起使用。
它们之间是否还有其他区别和限制?我知道这有点自以为是,但是Flutter太新了,因此最好注册公共利益,副作用和陷阱。
答案 0 :(得分:3)
我只是在解释我实际上发现的一个限制,也许还有其他限制。
在搜索了许多关于Get_it的教程和主题之后,即使我们在提供程序中进行了依赖注入,人们也为什么使用Get_it(),我无法理解DI的区别。然后,我陷入了一个场景,找到了“有什么局限性”这个问题的答案。
它们之间是否还有其他区别和局限性?
场景:
我有嵌套的小部件,小部件A有小部件B,小部件B有小部件C,我正在使用提供程序,并且每当值更改时都在访问每个小部件中的值。太好了,然后我制作了一个新的小部件D,它是一个单独的小部件,它不在小部件A层次结构内。但是,当我尝试在小部件D中访问相同的值时,它并没有改变。因为小部件D不在小部件A的树中。现在出现了提供程序依赖注入的限制。
结论
您将使用Get_it从树小部件中访问值。但是您无法访问 使用提供商更新值
注意
您需要使用提供程序包装应用程序以访问所有依赖项。
答案 1 :(得分:2)
两者之间的主要区别是provider
不是严格依赖注入。
通过使用小部件,provider
还能:
从长远来看,所有这些选项都是可选的,它们对您的应用程序的健康有好处。
它可以确保您始终保持最新状态,使“意大利面条式代码”变得更难,并使您的不同元素更容易组合。
答案 2 :(得分:0)
获取它不是依赖项注入解决方案,而是服务定位器。
如果要在一个类的两个或多个实现之间快速切换,这很有用。例如,对服务进行模型化,然后在“真实”服务或伪服务之间进行切换(出于调试目的)。
实际上,它无法检索/提供对现有对象的引用(单例例外,但您可以自己做同样的事情而无需付出更多的努力),并且只能提供新的对象。