【问题标题】:Provider hierarchy in flutter颤振中的提供者层次结构
【发布时间】:2020-05-18 16:45:19
【问题描述】:

我正在开发一个玩具应用程序,它是一个在线商店应用程序。我使用Provider 进行状态管理。随着它的进展,我注意到不容易实现的模式。我想了解您对此有何看法。我会解释这个案子。

有一个 productsScreen 显示产品列表,它从 ProductsProvider 获取产品列表。现在它只是从服务器获取所有产品。

还有另一个小部件是 MenuBarWidget。这个小部件包含一些东西,包括搜索框。与 ProductScreen 一样,它有一个名为 MenuBarProvider 的提供程序。现在,当用户在 MenuBarWidget 的搜索框中输入搜索词时,它会更新 MenuBarProvider;然后以某种方式 ProductsProvider 必须看到该更改并相应地调整产品列表。你是怎样做的?两个提供者如何通信?

我知道它可以在小部件中处理,但这看起来很丑陋。理想情况下,我想从 ProductsProvider 收听 MenuBarProvider;但我不知道该怎么做,我什至不确定这是否是个好主意。

欢迎提出任何想法。

【问题讨论】:

标签: flutter flutter-provider


【解决方案1】:

要让 2 个提供者相互“通信”,您应该使用 ProxyProvider。 当另一个提供者更新时,它会更新一个提供者。

ProxyProvider 是 Provider 包的一部分,它正是为此目的,为 Provider 提供依赖;有关文档,请参见此处:

https://pub.dev/packages/provider#proxyprovider

也请查看这篇文章以查看完整示例: https://dev.to/paulhalliday/how-to-use-proxyprovider-with-flutter-3ifo

你可以这样使用:

MultiProvider(
  providers: [
    Provider(
      create: (_) => UserService(),
    ),
    ProxyProvider<UserService, GreetingService>(
      update: (BuildContext context, UserService userService,
              GreetingService greetingService) =>
          GreetingService(userService: userService),
    ),
  ],
 )

当 UserService 提供程序更新时,GreetingService 也将更新,因此它们将始终保持同步。

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 2020-05-10
    • 2019-12-08
    • 2022-01-15
    • 2020-06-04
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    相关资源
    最近更新 更多