Flutter引入Git私有库后,build_runner无法为库中Retrofit相关代码生成.g.dart文件
Flutter引入Git私有库后,build_runner无法为库中Retrofit相关代码生成.g.dart文件
这个问题我之前也碰到过,核心原因是build_runner默认只会处理当前主项目的代码,不会自动去处理依赖包(包括你从Git引入的私有库)里的代码生成任务,给你两个可行的解决办法:
方法一:在库本地预生成.g.dart并提交到Git
这是最稳妥的方式,能避免主项目额外处理依赖的生成逻辑:
- 回到你的私有库项目根目录,运行生成命令:
flutter pub run build_runner build --delete-conflicting-outputs - 生成对应的
.g.dart文件后,别把这些文件加到.gitignore里,直接添加到Git版本控制中 - 提交并推送更新到你的Git仓库
- 回到主项目执行
flutter pub get拉取最新的库代码,此时主项目就能直接使用生成好的文件,无需再运行build_runner处理库的代码
方法二:配置主项目让build_runner处理依赖库的代码
如果不想提交生成文件,想在主项目中动态生成,可以这样配置:
- 在主项目根目录创建
build.yaml文件,替换下面的your_library_name为你Git库的实际名称:targets: $default: sources: - lib/** - packages/your_library_name/** - 确保主项目的
pubspec.yaml中也包含必要的开发依赖(即使库已经声明了,主项目也需要这些依赖来执行生成任务):dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 retrofit_generator: ">=7.0.0 <8.0.0" build_runner: 2.4.12 json_serializable: 6.8.0 - 在主项目中重新运行build_runner命令,这时就会同时处理主项目和依赖库的代码了:
flutter pub run build_runner build --delete-conflicting-outputs
额外注意事项
- 确认主项目的
pubspec.yaml中Git库的引用配置正确,比如私有库的话用SSH地址:dependencies: your_library_name: git: url: git@your-git-host.com:your-username/your-library.git ref: main # 可以指定分支、标签或者commit哈希 - 用方法一的话,每次修改库中的Retrofit接口代码,都需要重新生成
.g.dart并提交到Git;用方法二的话,每次更新库代码后,都要在主项目重新运行build_runner。
备注:内容来源于stack exchange,提问作者Naografix
相关产品推荐
相关产品推荐

