build_runner
- Dart course
- Expert
- Lesson 25/47
- 5 min
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
void main() {
// define a BuildConfig class (inputExtensions, outputExtension)
// create a BuildConfig; print inputExtensions and outputExtension
}Sample solution
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
class MyBuilder implements ____ {
Future<void> build(BuildStep s) async {}
}
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 |