去年我一直在使用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
但我不知道如何使用该参数,
有人可以帮助我吗,我将不胜感激, 谢谢 !
答案 0 :(得分:1)
ProxyProvider不需要create参数,但ChangeNotifierProxyProvider则需要,以避免每次都创建ChangeNotifier(使用ProxyProvider不会出现问题,因为这是一个没有侦听器的简单类)。创建一次调用,而更新可以多次调用,因此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)