flutter - 尝试创建自定义构建器会导致非唯一输出错误
问题描述
我正在尝试为我的 Flutter 项目创建自定义构建器。我想实现类似于 built_value 代码生成的东西。
我首先build.yaml
在项目的根文件夹中创建
targets:
$default:
builders:
app|db_builder:
enabled: true
builders:
db_builder:
target: ":db_builder"
import: "package:app/db/build/builder.dart"
builder_factories: ["dbBuilder"]
build_extensions: {".dart": [".db.g.part"]}
auto_apply: dependents
build_to: cache
applies_builders: ["source_gen|combining_builder"]
然后dbBuilder
在工厂实施app/db/build/builder.dart
import 'package:build/build.dart';
import 'package:source_gen/source_gen.dart';
import 'db_generator.dart';
Builder dbBuilder(BuilderOptions _) =>
SharedPartBuilder([DBAccessGenerator()], 'built_value');
DBAccessGenerator
是一个空类继承自Generator
我的项目还包含built_value_generator。
完成上述步骤后,运行时flutter pub run build_runner build
出现以下错误:
Both app:db_builder and built_value_generator:built_value may output
test/widget_test.built_value.g.part. Potential outputs must be unique across all builders.
为什么会发生这种情况?我已经看过built_value_generator的源代码build_extensions: {".dart": [".built_value.g.part"]}
,它声明了构建扩展,但我的声明不同,我正在使用另一个目标扩展。
解决方案
原因就在app/db/build/builder.dart
文件里面。
创建SharedPartBuilder
时,第二个参数是 a partId
,它是生成文件的实际输出扩展名,而不是文件中指定的扩展名build.yaml
。
因此,在这里设置另一个名称可以解决问题。
推荐阅读
- python - 请求无效。详细信息:参数:无效的 JSON。JSON 内容中无法识别令牌
- java - 在 Spring Boot JAVA 中将自定义标头注入 ServletRequest
- r - R:使用 ggthemes::extended_range_breaks() 更改 ggplot2 中的刻度数
- python - 在 Python 中使用 seaborn 将 distplot 和 boxplot 一起绘制时修复倒置的 distplot
- drools - 新手 - Drools 从相同的事实过滤
- sql - 如何将简单的 SELECT 语句转换为 SQL SERVER AGENT JOB 以进行计划和自动电子邮件
- python - Python中元组的返回类型注释
- git - 如果将父分支合并到主分支,子分支会发生什么?
- c++ - C++ 令牌粘贴运算符未在预处理器定义中连接 __LINE__
- loopback4 - Loopback 4 提取 POST 请求的原始正文