Usage

dart pub run build_runner build --delete-conflicting-outputs

Configure

import 'package:example/_model.dart';
import 'package:model_annotation/model_annotation.dart';

@ModelAnnotation()
class MyModel extends Model {
  @FieldAnnotation(parseJson: false)
  final int? id;
  final String? message;
  final DateTime? dateTime;

  MyModel(
    this.id, {
    required this.message,
    this.dateTime,
  });
}

File *.g.dart

import 'my_model.dart';

class MyModelEntity {
  final int? id;
  final String? message;
  final DateTime? dateTime;

  MyModelEntity({
    this.id,
    this.message,
    this.dateTime,
  });

  factory MyModelEntity.fromJson(Map<String, dynamic> json) => MyModelEntity(
    message: json["message"] is String ? json["message"] : null,
    dateTime: DateTime.tryParse(json["dateTime"].toString()),
  );

  Map<String, dynamic> toJson() => {
    "message": message,
    "dateTime": dateTime,
  };

  MyModel toModel() => MyModel(
    id,
    message: message,
    dateTime: dateTime,
  );
}