Попытка создать собственный построитель приводит к неуникальной ошибке вывода
Я пытаюсь создать собственный конструктор для своего проекта 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"]}
но мое объявление отличается, я использую другое целевое расширение.
1 ответ
Причина внутри app/db/build/builder.dart
файл.
При создании SharedPartBuilder
, второй аргумент - это partId
и это реальное выходное расширение сгенерированного файла, а не то, что указано в build.yaml
файл.
Итак, установка другого имени здесь решает проблему.
Подробнее здесь: https://github.com/dart-lang/build/issues/2670