Reputation: 351
In my app, I use freezed with json_serializable. In the folder, where I put all my data models a lot of generated files, like model.g.dart
, model.freeezed.dart
. Is there any possibility to move all generated files like that to a separate folder in the project, like generated
?
Upvotes: 20
Views: 6699
Reputation: 765
I created a build.yaml and used this code:
targets:
$default:
builders:
source_gen:combining_builder:
options:
build_extensions:
'^lib/network/models/{{dir}}/{{file}}.dart': 'lib/network/models/{{dir}}/generated/{{file}}.g.dart'
freezed:
options:
build_extensions:
'^lib/network/models/{{dir}}/{{file}}.dart': 'lib/network/models/{{dir}}/generated/{{file}}.freezed.dart'
If my tree is like this:
lib/network/models/folderName/my_model.dart
lib/network/models/folderName/my_model2.dart
lib/network/models/folderName2/my_model3.dart
lib/network/models/folderName2/my_model4.dart
The output will be
lib/network/models/folderName/generated/my_model.g.dart
lib/network/models/folderName/generated/my_model.freezed.dart
lib/network/models/folderName/generated/my_model2.g.dart
lib/network/models/folderName/generated/my_model2.freezed.dart
lib/network/models/folderName/my_model.dart
lib/network/models/folderName/my_model2.dart
lib/network/models/folderName2/generated/my_model3.g.dart
lib/network/models/folderName2/generated/my_model3.freezed.dart
lib/network/models/folderName2/generated/my_model4.g.dart
lib/network/models/folderName2/generated/my_model4.freezed.dart
lib/network/models/folderName2/my_model3.dart
lib/network/models/folderName2/my_model4.dart
So all my generated files are inside a generated folder at the same level as the file. Therefore, on the my_model.dart file, you need to include:
part 'generated/my_model.freezed.dart';
part 'generated/my_model.g.dart';
You will need to modify the path at build.yaml to match the path to your models. You will also need to modify the part route to match the output route you have indicated in the build.yaml file.
Upvotes: 2
Reputation: 137
Here's working example from stackoveflow:
Basically create build.yaml file like this, it will generate files in generated
folder:
targets:
$default:
builders:
source_gen|combining_builder:
generate_for:
- lib/**.dart
options:
build_extensions:
'^lib/{{}}.dart': 'lib/generated/{{}}.g.dart'
freezed|freezed:
enabled: true
options:
build_extensions:
'^lib/{{}}.dart': 'lib/generated/{{}}.freezed.dart'
Don't forget to add generated
to part
.
import 'package:freezed_annotation/freezed_annotation.dart';
part 'generated/person.g.dart';
part 'generated/person.freezed.dart';
@freezed
class Person with _$Person {
const factory Person({
required String firstName,
required String lastName,
required int age,
}) = _Person;
factory Person.fromJson(Map<String, Object?> json)
=> _$PersonFromJson(json);
}
Upvotes: 6
Reputation: 1497
Accordint to the build_runner documentation
flutter pub run build_runner build --output <dirname>
or
flutter pub run build_runner build --output models:<directory name>
to output only the models directory
Upvotes: 4