Code generation has many use cases in our Flutter apps, including JSON serialization, navigation, and internationalization.
Packages like Freezed compensate for missing Dart language features such as sealed unions and offer many useful features.
Many Flutter packages rely on build_runner, a build system for Dart code generation.
Unfortunately, build_runner takes long time to run because by default it analyzes all the Dart source files in your project.
There are two ways to mitigate this:
- move all files that depend on codegen to a separate package
- add a
build.yaml
file that specifies a subset of files to be processed:
targets:
$default:
builders:
freezed:freezed:
generate_for:
include:
- lib/models/**.dart
Setting this up correctly can save you a lot of time in the long run. 👍
Extra Tip
You can use a suffix such as *.codegen.dart
for all files that need to be processed by build_runner
and update the build.yaml
like this:
targets:
$default:
builders:
freezed:freezed:
generate_for:
include:
- lib/**.codegen.dart
This way you can place the files anywhere you want in your project.
This tip was inspired by this thread on Twitter.
Happy coding!