去年我一直在使用 Provider 包 3.1.0 版本在提供者之间共享价值,就像这样:
...
return MultiProvider(
providers: [
ChangeNotifierProvider.value(
value: Auth(),
),
ChangeNotifierProxyProvider<Auth, Products>(
builder: (ctx, auth, previousProd) => Prod(
auth.cred,
previousProd,
),
),
),
],)
...
现在 4.1.3 版本需要两个参数:create
和update
我在编辑我的应用程序时遇到困难,我试过:
...
return MultiProvider(
providers: [
ChangeNotifierProvider.value(
value: Auth(),
),
ChangeNotifierProxyProvider<Auth, Products>(
update: (ctx, auth, previousProd) => Prod(
auth.cred,
previousProd,
),
),
),
],)
...
它表明the create parameter is required
正如我所说但我不知道如何使用该参数,
有人可以帮助我吗,我将不胜感激,谢谢!
ProxyProvider 不需要 create 参数,但 ChangeNotifierProxyProvider 需要,以避免每次都创建 ChangeNotifier(使用 ProxyProvider 没有问题,因为它是一个没有侦听器的简单类)。create 被调用一次,而 update 可以被多次调用,所以 ChangeNotifierProxyProvider 的代码应该是这样的
ChangeNotifierProxyProvider<Auth, Products>(
create: (_) => Prod(),
update: (_, auth, product) => product..credential = auth.cred,
//instead of creating a new object Prod(), just reuse the existing one and set the new values
child: ...
)
和 Prod 类
class Prod extends ChangeNotifier{
Credential _cred;
Prod(){
//if you want to initialize some values
}
set credential(Credential credential) => _cred = credential;
//or some other logic you do here with the auth.cred
}
现在每次 Auth 更改并通知 ProxyProvider 时,它将重用在 create 中创建的相同对象,只需更改参数凭据(_cread)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句