簡體   English   中英

提供者與 Get_it

[英]Provider vs. Get_it

在搜索 Flutter 的依賴注入解決方案時,我發現了兩個很棒的庫: providerget_it

據我所知, provider有更多的樣板,但它非常適合 Flutter,一旦注入的值發生變化, Consumer可以重建Widget樹的一部分。

另一方面, get_it更直接、更容易使用,並且不依賴於 Flutter,因此可以與任何 Dart 代碼一起使用。

它們之間還有什么區別和限制嗎? 我知道這有點自以為是,但 Flutter 太新了,所以最好公開注冊好處、副作用和陷阱。

兩者的主要區別在於provider並不是嚴格的依賴注入

通過使用小部件, provider還能夠:

  • 提供程序與 Flutter 開發工具兼容
  • 知道何時無法訪問變量(范圍為樹)
  • 知道何時創建和處置對象
  • 同步模型 -> 模型和模型 -> UI
  • 僅覆蓋特定小部件樹的某些值
  • 主動防止循環依賴

從長遠來看,所有這些都是可選的,但對您的應用程序的健康有益。

它確保您始終保持最新狀態,使“意大利面條式代碼”變得更加困難,並使您的不同元素更加可組合。

我只是在解釋我實際發現的一個限制,可能還有其他限制。

在搜索了許多關於 Get_it 的教程和主題之后,即使我們在提供程序中有依賴注入,為什么人們仍然使用 Get_it(),我無法理解 DI 方面的差異。 然后我陷入了一個場景,並找到了“有什么限制”的問題的答案。

它們之間還有什么區別和限制嗎?

設想:

我有嵌套的小部件,小部件 A 有小部件 B,小部件 B 有小部件 C,我正在使用提供程序,並且每當值更改時訪問每個小部件中的值。 很棒,然后我制作了一個新的小部件 D,它是一個單獨的小部件,它不在小部件 A 層次結構中。 但是當我嘗試在 Widget D 中訪問相同的值時,它並沒有改變。 因為widget D 不在Widget A 的樹中。現在來了provider 依賴注入的限制。

結論

您將使用 Get_it 訪問樹小部件之外的值。 但是您無法使用 provider 訪問更新后的值

更新答案

在上面的場景中,你需要用 Provider 包裹 app 才能訪問所有的依賴。

Get It 不是依賴注入解決方案,而是服務定位器。

如果您想在一個類的兩個或多個實現之間快速切換,它會很有用。 例如模擬服務,並在“真實”服務或虛假服務之間進行更改(用於調試目的)。

實際上,它無法檢索/提供對現有對象的引用(單例除外,但您可以自己做同樣的事情而無需付出更多努力)並且只能提供新對象。

通過各種教程,我了解到 get it 包可以稱為全局變量,可以從任何小部件訪問任何小部件,無論是否嵌套 VS 提供程序只能在嵌套小部件之間訪問。 M.ArslanKhan 更好地解釋了這個例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM