CodeBlanks Logo Icon CodeBlanks

build_runner

Learn code generation with build_runner.

build_runner

build_runner is the code generation tool for Dart. It reads source files, runs Builder classes and writes generated .g.dart files.

Run it with dart run build_runner build. For watch mode add the --watch flag; it regenerates automatically when sources change.

Configuration lives in build.yaml: it specifies which Builders run on which files. Generated files are not edited by hand.

build.yaml and targets

build.yaml has two main sections: targets (which packages get generation) and builders (which Builders are enabled).

Example: builders: my_builder|my_builder: enabled: true. This enables the Builder in the my_builder package.

Generated file names derive from the source: user.dart → user.g.dart. The .g.dart extension marks a generated file.

Practice Define a BuildConfig

Define a BuildConfig class with final List<String> inputExtensions and final String outputExtension fields, and a BuildConfig(this.inputExtensions, this.outputExtension) constructor. In main create final config = BuildConfig(['.dart'], '.g.dart');; print config.inputExtensions and config.outputExtension.

Starter code

main.dart
void main() {
  // define a BuildConfig class (inputExtensions, outputExtension)
  // create a BuildConfig; print inputExtensions and outputExtension
}

Sample solution

main.dart
class BuildConfig {
  final List<String> inputExtensions;
  final String outputExtension;
  BuildConfig(this.inputExtensions, this.outputExtension);
}

void main() {
  final config = BuildConfig(['.dart'], '.g.dart');
  print(config.inputExtensions);
  print(config.outputExtension);
}

Expected output

[.dart]
.g.dart

Questions and answers

Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.

1 What does dart run build_runner build do?

  • Runs unit tests
  • Runs Builders to generate code Correct answer
  • Compiles to AOT
  • Formats the source file

Explanation: build_runner runs Builders and produces .g.dart files.

2 The Builder interface

Question
class MyBuilder implements ____ {
  Future<void> build(BuildStep s) async {}
}
Answer
class MyBuilder implements Builder {
  Future<void> build(BuildStep s) async {}
}

Explanation: a code generator implements the Builder interface.

3 Match the build_runner parts

Term Meaning
build_runner Code generator tool
build.yaml Configuration
build Generate subcommand
.g.dart Generated file

All lessons in Expert