Riverpod的AsyncValue的when方法的loading和error参数不符合官方文档报错
问题根因
你当前遇到的类型不匹配是1.0.0-dev.11之后的dev迭代版本对AsyncValue.when的方法签名做了不兼容调整导致的:
依赖声明如果带了^前缀,即使你指定了^1.0.0-dev.11,pub也会自动拉取更高的兼容dev版本,而更高版本的when方法给loading、error回调新增了额外的可选参数,和你原来的写法不匹配。
解决方案
方案1:固定依赖版本(恢复到之前可正常运行的环境)
- 把
pubspec.yaml中flutter_riverpod的依赖声明去掉版本前的^,固定为准确版本:
dependencies: flutter_riverpod: 1.0.0-dev.11
- 依次执行以下操作:
- 运行
flutter clean - 删除项目根目录下的
pubspec.lock文件 - 运行
flutter pub get
重新运行项目即可恢复正常。
方案2:适配新版API签名
如果你不想固定版本,直接修改when的回调参数,忽略新增的无用参数即可:
return user.when( loading: (_) => CircularProgressIndicator(), error: (error, stack, _) => Text('Oops, something unexpected happened'), data: (User user) => Text('Hello ${user.name}'), );
额外建议
dev属于不稳定的测试版本,API会频繁变动,如果是生产项目,建议升级到当前的稳定2.x系列版本,API已经稳定,不会出现这类突发的签名变更问题。
内容的提问来源于stack exchange,提问作者kodaira
相关产品推荐
相关产品推荐

