0

I'm trying to create a code generator that takes input a JSON file and generates multiple classes in multiple files.

And my question is, is it possible to create multiple files for one input using build from dart lang?

Artur Sikora
  • 65
  • 1
  • 8

1 Answers1

0

Yes it is possible. There are currently many tools in available on pub.dev that have code generation. For creating a simple custom code generator, check out the package code_builder provided by the core Dart team.

You can use dart_style as well to format the output of the code_builder results.

Here is a simple example of the package in use (from the package's example):

import 'package:code_builder/code_builder.dart';
import 'package:dart_style/dart_style.dart';

final _dartfmt = DartFormatter();

// The string of the generated code for AnimalClass
String animalClass() {
  final animal = Class((b) => b
    ..name = 'Animal'
    ..extend = refer('Organism')
    ..methods.add(Method.returnsVoid((b) => b
      ..name = 'eat'
      ..body = refer('print').call([literalString('Yum!')]).code)));
  return _dartfmt.format('${animal.accept(DartEmitter())}');
}

In this example you can use the dart:io API to create a File and write the output from animalClass() (from the example) to the file:

final animalDart = File('animal.dart');

// write the new file to the disk
animalDart.createSync();

// write the contents of the class to the file
animalDart.writeAsStringSync(animalClass());

You can use the File API to read a .json from the path, then use jsonDecode on the contents of the file to access the contents of the JSON config.

Apealed
  • 1,415
  • 8
  • 29