【问题标题】:Flutter - ChangeNotifierProxyProvider packageFlutter - ChangeNotifierProxyProvider 包
【发布时间】:2020-06-19 21:53:49
【问题描述】:

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

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

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-07
      • 2021-01-10
      • 2020-11-03
      • 2021-06-24
      • 2020-06-20
      • 2021-04-24
      • 2020-07-22
      • 2019-12-23
      相关资源
      最近更新 更多