Skip to content

Code Generation

Dustin Catap edited this page Jun 19, 2024 · 4 revisions

We'll use build_runner to generate the code for:

Setup FVM

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 Build Runner

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.