flutter - 如何在另一个代码生成器的顶部运行代码生成器?

标签 flutter dart

使用 source_gen stack 来制作代码生成器,如何制作生成代码的生成器,该代码将作为另一个生成器的输入(更具体地说 json_serializable )?

例如,考虑:

class Example extends Generator {
  @override
  String generate(LibraryReader library, BuildStep buildStep) {
    return '''
@JsonSerializable(nullable: false)
class Person {
  final String firstName;
  final String lastName;
  final DateTime dateOfBirth;
  Person({this.firstName, this.lastName, this.dateOfBirth});
  factory Person.fromJson(Map<String, dynamic> json) => _PersonFromJson(json);
  Map<String, dynamic> toJson() => _PersonToJson(this);
}
''';
  }
}

这是一个代码生成器的例子,它输出代码然后需要发送到 json_serializable
我该怎么做才能做到json_serializable在这里正确生成?

最佳答案

查看 build.yaml 配置文件文档以获取更多信息,但我认为您应该使用 applies_builders param这允许在定义的构建之后执行另一个构建。

该示例显示了一个生成 .tar.gz 文件的构建器,然后执行另一个将 .tar.gz 文件作为输入的构建

builders:
  # The regular builder config, creates .tar.gz files.
  regular_builder:
    import: "package:my_package/builder.dart"
    builder_factories: ["myBuilder"]
    build_extensions: {".dart": [".tar.gz"]}
    auto_apply: dependents
    apply_builders: [":archive_extract_builder"]
post_process_builders:
  # The post process builder config, extracts .tar.gz files.
  extract_archive_builder:
    import: "package:my_package/extract_archive_builder.dart"
    builder_factory: "myExtractArchiveBuilder"
    input_extensions: [".tar.gz"]

所以与 source_gen你应该为你的构建实现
applies_builders: ["source_gen|combining_builder", "json_serializable"]

并配置另一个构建器
json_serializable:
    import: "package:json_serializable/builder.dart"
    builder_factories: ["jsonSerializable"]
    build_extensions: {".dart": ["json_serializable.g.part"]}
    auto_apply: dependents
    build_to: cache
    applies_builders: ["source_gen|combining_builder"]

关于flutter - 如何在另一个代码生成器的顶部运行代码生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59503994/

相关文章:

flutter - Flutter此函数的返回类型为 'Future<bool>',但不以return语句结尾

Flutter Web 集成测试 CORS XMLHttpRequest 错误

flutter - didChangeAppLifecycleState 没有按预期工作

dart - Dart 是否支持与 native 库的接口(interface)?

android - 你如何强制 Flutter BottomNavigationBar 在所有 TABS 上具有相同的宽度?

flutter - 如何在一个地方(如 main)捕获异步异常并在 AlertDialog 中显示?

flutter - 交换列表中的元素

xml - 如何将 xml 文件导入 dart 对象

flutter - 如果有很多要滑动的项目, slider 会挂起

android - Flutter 未检测到 Android SDK