我有三个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的多个副本,但是我不知道如何修复它,或者一个更好的替代实现会是什么样的。
发布于 2022-06-03 18:57:09
如果有多个C实例是问题所在,那么我认为您可以使用Provider.of<C>(context)来获取一个实例。
MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => A()),
ChangeNotifierProvider(create: (context) => B()),
ChangeNotifierProvider(create: (context) => C()),
ChangeNotifierProxyProvider<A, C>(
create: (context) => Provider.of<C>(context),
update: (_, a, c) => c!..updateFromA(a),
),
ChangeNotifierProxyProvider<B, C>(
create: (context) => Provider.of<C>(context),
update: (_, b, c) => c!..updateFromB(b),
),
]否则,您可以将单例模式应用于C:
class C {
static final C _instance = C._();
factory C() {
return _instance;
}
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),
),
]https://stackoverflow.com/questions/72492020
复制相似问题