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

Flutter引入Git私有库后,build_runner无法为库中Retrofit相关代码生成.g.dart文件

Flutter引入Git私有库后,build_runner无法为库中Retrofit相关代码生成.g.dart文件

这个问题我之前也碰到过,核心原因是build_runner默认只会处理当前主项目的代码,不会自动去处理依赖包(包括你从Git引入的私有库)里的代码生成任务,给你两个可行的解决办法:

方法一:在库本地预生成.g.dart并提交到Git

这是最稳妥的方式,能避免主项目额外处理依赖的生成逻辑:

  1. 回到你的私有库项目根目录,运行生成命令:
    flutter pub run build_runner build --delete-conflicting-outputs
    
  2. 生成对应的.g.dart文件后,别把这些文件加到.gitignore里,直接添加到Git版本控制中
  3. 提交并推送更新到你的Git仓库
  4. 回到主项目执行flutter pub get拉取最新的库代码,此时主项目就能直接使用生成好的文件,无需再运行build_runner处理库的代码

方法二:配置主项目让build_runner处理依赖库的代码

如果不想提交生成文件,想在主项目中动态生成,可以这样配置:

  1. 在主项目根目录创建build.yaml文件,替换下面的your_library_name为你Git库的实际名称:
    targets:
      $default:
        sources:
          - lib/**
          - packages/your_library_name/**
    
  2. 确保主项目的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
    
  3. 在主项目中重新运行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:20:30