扑朔迷离的提供商层次

时间:2020-05-18 16:45:19

标签: flutter flutter-provider

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

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

还有另一个小部件,即MenuBarWidget。该小部件包含一些内容,包括搜索框。像ProductScreen一样,它具有一个称为MenuBarProvider的提供程序。现在,当用户在MenuBarWidget中的搜索框中键入搜索词时,它会更新MenuBarProvider。然后ProductsProvider必须以某种方式查看该更改并相应地调整产品列表。你是怎样做的?两家提供商如何沟通?

我知道可以在小部件中处理它,但这看起来非常难看。理想情况下,我想从ProductsProvider收听MenuBarProvider;但我不确定该怎么做,甚至不确定那是一个好主意。

欢迎提出任何想法。

1 个答案:

答案 0 :(得分:0)

要使2个提供程序彼此“通信”,应使用ProxyProvider。 当另一个提供程序更新时,它将更新一个提供程序。

ProxyProvider是Provider程序包的一部分,它正是为此目的而提供对Providers的依赖关系。看到这里的文档:

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也将更新,因此它们将始终保持同步。