Flutter Provider - 使用 ProxyProvider 的循环依赖

Posted

技术标签:

【中文标题】Flutter Provider - 使用 ProxyProvider 的循环依赖【英文标题】:Flutter Provider - Circular Dependencies using ProxyProvider` 【发布时间】:2019-11-17 10:39:11 【问题描述】:

我有以下服务:

    SecuredStorageService() ApiService(this.authService) AuthService(this.securedStorageService, this.apiService) RegisterService(this.apiService, this.securedStorageService)

这导致我写:

providers: [
  Provider<SecuredStorageService>.value(value: SecuredStorageService()),
  ProxyProvider<AuthService, ApiService>(
    builder: (_, auth, __) => ApiService(authService: auth),
  ),
  ProxyProvider2<ApiService, SecuredStorageService, RegisterService>(
    builder: (_, api, storage, __) => RegisterService(apiService: api, securedStorageService: storage),
  ),
  ProxyProvider2<ApiService, SecuredStorageService, AuthService>(
    builder: (_, api, storage, __) => AuthService(apiService: api, securedStorageService: storage),
  ),
],

到目前为止,我可以说它看起来已经很乱了。但事实并非如此。当我运行应用程序时,我收到以下错误:

那我该怎么办?我在所有ProxyProviders 之前添加了Provider&lt;AuthService&gt;。但是,AuthService 被构建了两次!这失去了作为一个单一实例的全部意义(或者不是吗?)。

我的主要目标是像在 Angular 或 Laravel 中一样进行依赖注入。

【问题讨论】:

【参考方案1】:

ProxyProvider 和小部件通常与循环依赖作斗争,因为它通常是“意大利面条代码”的标志 (see more)

因此,使用ProxyProvider 您将无法制作循环依赖图。

如果这确实是您想要的,请考虑使用 Provider.value 并手动处理您的依赖项。

【讨论】:

以上是关于Flutter Provider - 使用 ProxyProvider 的循环依赖的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:如何用 Provider 播放动画?

flutter_bloc/provider RepositoryProvider vs Provider

在 Flutter 中,是不是可以使用 Provider 创建监听函数

使用 Provider 工具时出现 Flutter 错误

如何使用 Provider 实现 Flutter 本地化?

使用 Provider 向整个 Flutter 模块全局提供 BLoC