Flutter-ChangeNotifierProxyProvider程序包

时间:2020-06-19 21:53:49

标签: flutter dart

去年我一直在使用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版本需要两个参数:createupdate

我被困在编辑应用程序中,我尝试过:

...
return MultiProvider(
  providers: [
    ChangeNotifierProvider.value(
      value: Auth(),
    ),
    ChangeNotifierProxyProvider<Auth, Products>(
      update: (ctx, auth, previousProd) => Prod(
            auth.cred,
            previousProd,
          ),
    ),
    ),
  ],)
...

它表明我所说的the create parameter is required 但我不知道如何使用该参数,

有人可以帮助我吗,我将不胜感激, 谢谢 !

1 个答案:

答案 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)