【问题标题】:Trying to create a custom builder results in a non unique output error尝试创建自定义构建器会导致非唯一输出错误
【发布时间】:2020-04-16 21:18:25
【问题描述】:

我正在尝试为我的 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 是继承自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"]} 但我的声明不同,我正在使用另一个目标扩展。

【问题讨论】:

    标签: flutter dart built-value dart-build


    【解决方案1】:

    原因在app/db/build/builder.dart 文件中。

    创建SharedPartBuilder时,第二个参数是partId,它是生成文件的真正输出扩展名,而不是build.yaml文件中指定的扩展名。

    因此,在这里设置另一个名称可以解决问题。

    更多:https://github.com/dart-lang/build/issues/2670

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 2017-10-27
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多