使用 Provider 进行依赖注入的正确方法是什么?

What's the proper way to dependecy inject with Provider?

我正在构建一个应用程序并想使用 Provider 作为我的随身依赖工具。

我想构建一个具有以下架构的应用程序:

视图非常简单 UI,(几乎)每个视图都由视图模型支持。这些视图模型依赖于服务持有的值。

Viewmodels 使用 ChangeNotifierProvider 进行了扩展以反映 UI 中的变化,这工作正常。但是我应该用什么来响应服务的变化。单个服务可以在多个视图模型中使用,当然,我需要让所有视图模型保持最新。

我查阅了一些教程,在 Flutter Provider v3 Architecture using ProxyProvider for Injection 中进行了挖掘,但它确实没有向我解释这种情况,或者我不明白。

ProxyProvider 用于那里的其他情况。 Viewmodel 向服务发出请求,但它的值直接在 UI 中使用。

建立这种连接的正确方法是什么?在这种情况下我应该使用 ChangeNotifierProxyProvider 吗?我应该使用流吗?

要用你说的di有ProxyProvider; ProxyProvider 可以是应用范围的(在 App 小部件之上声明,因此他可以在应用内的任何地方访问,例如 AuthService)或小部件(屏幕)范围,例如您的 ViewModel

本例中A为MyWidget的ViewModel,B为Service Ps。您应该在此层次结构之上提供另一个提供 B class 的提供者,以便 ProxyProvider 可以访问它 "provide" 到 A class

ProxyProvider<B, A>(
        create: (_) => A(),
        update: (_, b, a) => a..bClassVariable = b,
        dispose: (_, a) => a.dispose(), //if you use streams
        child: MyWidget(

        ),
      )

关于你的最后一个答案,没有答案)只有你应该决定哪种方法更适合你的需求,如果你熟悉 ViewVievModel,你可以继续使用它,或者学习一些新的东西,比如 BloC

Ps。如果您使用 ViewModel ChangeNotifierProxyProvider 将正常工作 如果您使用 bloc 流,则应使用