多个ChangeNotifierProxyProviders将更新馈送到ChangeNotifier
我有三个changeNotifierProvider
提供商,让我们称它们为a
,b
和c
。
我需要的是提供商的更改a
和b
以更新提供商c
,但是下面的代码不起作用。
MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => A()),
ChangeNotifierProvider(create: (context) => B()),
ChangeNotifierProxyProvider<A, C>(
create: (context) => C(),
update: (_, a, c) => c!..updateFromA(a),
),
ChangeNotifierProxyProvider<B, C>(
create: (context) => C(),
update: (_, b, c) => c!..updateFromB(b),
),
]
我认为它不起作用的原因是因为我最终获得了多个提供商c
的副本,但是我不确定如何修复它或更好的替代实现是什么样的。
I have three ChangeNotifierProvider
providers, let's call them A
, B
and C
.
What I need is for changes in providers A
and B
to update provider C
, but the code below isn't working.
MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => A()),
ChangeNotifierProvider(create: (context) => B()),
ChangeNotifierProxyProvider<A, C>(
create: (context) => C(),
update: (_, a, c) => c!..updateFromA(a),
),
ChangeNotifierProxyProvider<B, C>(
create: (context) => C(),
update: (_, b, c) => c!..updateFromB(b),
),
]
I think the reason why it doesn't work is because I end up with multiple copies of provider C
, but I am not sure how to fix it or what a better alternative implementation would look like.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
进行了一些搜索之后,我意识到Flutter提供了一种使用
changeNotifierProxyProvider2
来解决此问题的优雅开箱即用的方式。Flutter还提供
ChangeNotifierProxyProvider3
通过changeNotifierProxyProvider6
,但这当然会变得非常冗长且令人困惑。After doing some searching, I realized that Flutter provides an elegant out-of-the-box way of solving this problem using
ChangeNotifierProxyProvider2
.Flutter also provides
ChangeNotifierProxyProvider3
throughChangeNotifierProxyProvider6
, but that would, of course, get very verbose and confusing.如果问题是一个以上的实例,那么我认为您可以使用
提供者。
否则,您可以将Singleton模式应用于C:
If having more than one instance of C is the problem, then I think you can just use
Provider.of<C>(context)
to get a single instance.Or else, you could apply the singleton pattern to C: