Flutter运行build_runner时ExpandIterable类型不匹配报错如何解决
报错成因及解决方案
问题成因
- 依赖版本不兼容:项目使用的
retrofit_generator版本与analyzer、build_runner或Dart/Flutter SDK版本存在适配冲突,旧版本retrofit生成器未适配新版analyzer返回的ExpandIterable类型,触发类型强转异常。 - 注解使用错误:代码中对
GET类型的请求添加了@FormUrlEncoded()注解,该注解仅适用于携带表单请求体的请求(如POST、PUT等),GET请求无请求体,错误注解会导致生成器解析接口逻辑异常。
解决方案
- 修正接口注解:删除两个GET接口上的
@FormUrlEncoded()注解,修正后的代码如下:
part 'api_services.g.dart'; @RestApi(baseUrl: Preferences.hrmsAPI) abstract class RestClient { factory RestClient(Dio dio) = _RestClient; @GET('config') Future<WrappedResponse> config(); @GET('profile') Future<WrappedResponse> profile(@Header('Authorization') String token); }
- 对齐依赖版本:在
pubspec.yaml中使用适配的依赖版本组合,Flutter 3.10+ / Dart 3.0+ 推荐版本如下:
dependencies: retrofit: ^4.0.1 dio: ^5.1.1 dev_dependencies: retrofit_generator: ^7.0.1 build_runner: ^2.4.2 # 若仍有兼容问题可锁定analyzer版本 # analyzer: ^5.13.0
- 重新执行构建:依次执行以下命令清理缓存后重新构建:
- 清理项目缓存:
flutter clean - 拉取依赖:
flutter pub get - 执行构建:
flutter pub run build_runner build --delete-conflicting-outputs
内容的提问来源于stack exchange,提问作者Player 2nd
相关产品推荐
相关产品推荐

