-
Notifications
You must be signed in to change notification settings - Fork 3
Code Generation
Dustin Catap edited this page Jun 19, 2024
·
4 revisions
We'll use build_runner
to generate the code for:
- Dependency injection using
injectable
- JSON serialization/deserialization using
json_serializable
- Resource management using
flutter_gen
- Mapper classes using
auto_mappr
- Localization files using
intl_utils
- Mocks in tests using
mockito
- Database ORM using
drift
- API clients using
retrofit
- Routing and navigation using
auto_route
This project uses FVM to manage its Flutter SDK versions. You need to install it first before you can run any flutter
or dart
commands.
# Install the Flutter SDK version specified in .fvm/fvm_config.json
fvm install
Run the command in the project directory to run the generator once:
fvm dart run build_runner build
or run the generator when necessary every time a file is edited:
fvm dart run build_runner watch
If there are errors, run this command:
fvm dart run build_runner build --delete-conflicting-outputs
Run this command for generating localization files:
# Generate files
fvm dart run intl_utils:generate
A sample of a class using json_serializable
:
// user_login_request_contract.dart
part 'user_login_request_contract.g.dart';
@JsonSerializable(fieldRename: FieldRename.pascal)
class UserLoginRequestContract extends DataContract {
UserLoginRequestContract({required this.email, required this.password});
final String email;
final String password;
factory UserLoginRequestContract.fromJson(Map<String, dynamic> json) => _$UserLoginRequestContractFromJson(json);
@override
Map<String, dynamic> toJson() => _$UserLoginRequestContractToJson(this);
}
The generated file, typically has file name .g.dart
:
// user_login_request_contract.g.dart
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'user_login_request_contract.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
UserLoginRequestContract _$UserLoginRequestContractFromJson(
Map<String, dynamic> json) =>
UserLoginRequestContract(
email: json['Email'] as String,
password: json['Password'] as String,
);
Map<String, dynamic> _$UserLoginRequestContractToJson(
UserLoginRequestContract instance) =>
<String, dynamic>{
'Email': instance.email,
'Password': instance.password,
};
❗ IMPORTANT
- These generated files are not commited to git. Code eneration should be part of your CI workflow.