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
相关产品推荐
相关产品推荐

