尝试创建自定义构建器会导致非唯一输出错误
Trying to create a custom builder results in a non unique output error
我正在尝试为我的 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"]
然后在 app/db/build/builder.dart
实施 dbBuilder
工厂
import 'package:build/build.dart';
import 'package:source_gen/source_gen.dart';
import 'db_generator.dart';
Builder dbBuilder(BuilderOptions _) =>
SharedPartBuilder([DBAccessGenerator()], 'built_value');
DBAccessGenerator
是一个空 class 继承自 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 的 source code 并将构建扩展声明为 build_extensions: {".dart": [".built_value.g.part"]}
但我的声明不同,我使用的是另一个目标扩展。
原因在 app/db/build/builder.dart
文件中。
创建 SharedPartBuilder
时,第二个参数是 partId
,它是生成文件的实际输出扩展名,而不是 build.yaml
文件中指定的扩展名。
所以,在这里设置另一个名称可以解决问题。
我正在尝试为我的 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"]
然后在 app/db/build/builder.dart
dbBuilder
工厂
import 'package:build/build.dart';
import 'package:source_gen/source_gen.dart';
import 'db_generator.dart';
Builder dbBuilder(BuilderOptions _) =>
SharedPartBuilder([DBAccessGenerator()], 'built_value');
DBAccessGenerator
是一个空 class 继承自 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 的 source code 并将构建扩展声明为 build_extensions: {".dart": [".built_value.g.part"]}
但我的声明不同,我使用的是另一个目标扩展。
原因在 app/db/build/builder.dart
文件中。
创建 SharedPartBuilder
时,第二个参数是 partId
,它是生成文件的实际输出扩展名,而不是 build.yaml
文件中指定的扩展名。
所以,在这里设置另一个名称可以解决问题。