Попытка создать собственный построитель приводит к неуникальной ошибке вывода - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь создать собственный конструктор для своего проекта Flutter. Я хочу добиться чего-то похожего на генерацию кода built_value.

Я начал с создания build.yaml в папке root моего проекта

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 фабрику at 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

Мой проект также содержит встроенный_генерирующий_стандарт.

После вышеупомянутых шагов, когда выполняется 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.

Почему это происходит? Я видел исходный код встроенного_значения_генератора, и он объявляет расширения сборки как build_extensions: {".dart": [".built_value.g.part"]}, но мое объявление отличается, я использую другое целевое расширение.

1 Ответ

0 голосов
/ 21 апреля 2020

Причина находится внутри файла app/db/build/builder.dart.

При создании SharedPartBuilder вторым аргументом является partId, и это реальное расширение выходного файла сгенерированного файла, а не указанное в build.yaml файл.

Итак, установка здесь другого имени решает проблему.

Подробнее здесь: https://github.com/dart-lang/build/issues/2670

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...