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

Flutter使用Ferry执行build_runner构建报req_builder未知错误

问题原因

报错由两个核心问题引发:

  • 依赖配置位置错误:ferry_generator、gql_build这类build_runner扩展包属于开发时依赖,必须放在pubspec.yaml的dev_dependencies区块下。如果放在普通运行时依赖区块,build_runner无法扫描识别到ferry提供的req_builder,就会抛出not a known Builder警告。
  • build.yaml格式错误:YAML是严格依赖缩进判断层级的配置格式,你提供的build.yaml中$default、builders两个字段没有和父层级保持正确的缩进差,导致配置解析逻辑无法读取到你设置的schema路径,取值为null时触发type 'Null' is not a subtype of type 'String'的类型转换致命错误。另外你在schema_builder的type_overrides中将自定义类型写为XFiles,其余builder中写为XFile,拼写不一致会导致后续生成的代码类型不匹配。
修复步骤
  • 修正pubspec.yaml的依赖位置,将所有代码生成相关依赖移到dev_dependencies区块,参考配置如下:
dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^2.4.6
  ferry_generator: ^0.9.0+1
  gql_build: ^0.8.0
  gql_code_builder: ^0.8.0

修改完成后执行flutter pub get拉取正确版本的依赖。

  • 修正build.yaml的缩进,YAML要求子层级比父层级多2个空格(禁止使用Tab键缩进),同时统一所有builder下type_overrides的自定义类型名拼写,参考配置如下:
targets:
  $default:
    builders:
      gql_build|schema_builder:
        enabled: true
        options:
          schema: care_giver_app|lib/data/repositories/graphql/schema/schema.graphql
          type_overrides:
            slipImage:
              name: XFile
      gql_build|ast_builder:
        enabled: true
      gql_build|data_builder:
        enabled: true
        options:
          schema: care_giver_app|lib/data/repositories/graphql/schema/schema.graphql
          type_overrides:
            slipImage:
              name: XFile
      gql_build|var_builder:
        enabled: true
        options:
          schema: care_giver_app|lib/data/repositories/graphql/schema/schema.graphql
          type_overrides:
            slipImage:
              name: XFile
      gql_build|serializer_builder:
        enabled: true
        options:
          schema: care_giver_app|lib/data/repositories/graphql/schema/schema.graphql
      ferry_generator|req_builder:
        enabled: true
        options:
          schema: care_giver_app|lib/data/repositories/graphql/schema/schema.graphql
          type_overrides:
            slipImage:
              name: XFile
  • 清理旧的构建缓存后重新执行代码生成命令:
flutter pub run build_runner clean
flutter pub run build_runner build --delete-conflicting-outputs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:30:49