Flutter - ChangeNotifierProxyProvider 包

曼纳尼

去年我一直在使用 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正如我所说但我不知道如何使用该参数,

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

埃德温

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章