You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter ChangeNotifierProxyProvider报update参数缺失及类型不匹配错误如何解决

问题原因
  • 报错是provider包版本不兼容导致的,旧教程使用的是3.x及更早版本的provider,而你本地项目安装的是4.0及以上版本的provider,4.0版本对ProxyProvider系列接口做了不兼容更新:
    • 原先支持3个入参的create参数被拆分,现在create仅接收BuildContext单个入参,负责首次实例初始化
    • 新增必填的update参数,接收BuildContext、依赖的实例、旧实例三个入参,负责依赖更新时刷新当前实例
  • 你的两个报错正好对应这个接口变更:一是没有传入必填的update参数,二是你把本该传给update的三参数函数传给了仅接受单参数的create参数。
解决方案

两种方案可选,推荐第一种适配新版API:

方案1:适配新版provider接口

修改所有ChangeNotifierProxyProvider的代码,拆分create和update逻辑即可,以Products对应的配置为例:

ChangeNotifierProxyProvider<Auth, Products>(
  // create负责首次初始化,暂时传空值,后续update会自动更新
  create: (ctx) => Products('', '', []),
  // 依赖的Auth实例更新时触发update,走你原先的逻辑
  update: (ctx, auth, previousProducts) => Products(
    auth.token,
    auth.userId,
    previousProducts == null ? [] : previousProducts.items,
  ),
)

同理修改Orders对应的配置:

ChangeNotifierProxyProvider<Auth, Orders>(
  create: (ctx) => Orders('', '', []),
  update: (ctx, auth, previousOrders) => Orders(
    auth.token,
    auth.userId,
    previousOrders == null ? [] : previousOrders.orders,
  ),
)

修改完成后错误就会消失,逻辑和你原先的写法完全一致。

方案2:锁定provider旧版本

如果你不想改动现有代码,可以在pubspec.yaml中指定使用旧版本provider:

dependencies:
  flutter:
    sdk: flutter
  provider: ^3.2.0

执行flutter pub get后即可恢复正常。


内容的提问来源于stack exchange,提问作者user11874694

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:39:03