我正在开发一个玩具应用程序,这是一个在线商店应用程序。我使用Provider
进行状态管理。随着它的发展,我注意到不容易实现的模式。我想了解您对此有何看法。我会解释这个情况。
有一个productsScreen,其中显示产品列表,它从ProductsProvider获得其产品列表。现在,它只是从服务器获取所有产品。
还有另一个小部件,即MenuBarWidget。该小部件包含一些内容,包括搜索框。像ProductScreen一样,它具有一个称为MenuBarProvider的提供程序。现在,当用户在MenuBarWidget中的搜索框中键入搜索词时,它会更新MenuBarProvider。然后ProductsProvider必须以某种方式查看该更改并相应地调整产品列表。你是怎样做的?两家提供商如何沟通?
我知道可以在小部件中处理它,但这看起来非常难看。理想情况下,我想从ProductsProvider收听MenuBarProvider;但我不确定该怎么做,甚至不确定那是一个好主意。
欢迎提出任何想法。
答案 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也将更新,因此它们将始终保持同步。