Zeffry Reynando
Zeffry Reynando

Reputation: 3899

fromJson returning null value

I used Freezed package to generate my class. I have class and generate toJson & fromJson , i have problem generate json from API to Object. I have return json from API like this :

{
    "status": "ok",
    "message": "Data utang sebagai pembertang ",
    "data": [
        {
            "id_utang": "124",
            "pembertang": {
                "id_user": "111395227810958186033",
                "name_user": "Zeffry Reynando",
                "email_user": "[email protected]",
                "image_user": "https://lh3.googleusercontent.com/a-/AOh14GiIqxTHoBba1eooOh9TmsBkVFb9GQzz3zByx8IIKA=s96-c",
                "token_fcm": "dk5s7T9ARrmSVHl1e4T1zc:APA91bFUEyOcwjLCZEuW525bxn9forOPVxvc2IGlc2fD90rf0znghnuGtJWuWnaGIs_1Zw8xBfuJ5B5ggj1zut4fenzJHqD7PgCrHbiHBu0vFqcyVZw9zHfiYDN9kBSUj2ekouIu99Su",
                "created_date": "2020-07-26 12:04:33"
            },
            "pengutang": {
                "id_user": "105164526876912904397",
                "name_user": "Akun Testing",
                "email_user": "[email protected]",
                "image_user": "https://lh5.googleusercontent.com/-p46wtaUFEQA/AAAAAAAAAAI/AAAAAAAAAAA/AMZuucn5itDrBrYoZfLoCRfqHzkLo-FgIA/s96-c/photo.jpg",
                "token_fcm": "eqzBVVRAQOqRBKdyi_oQHk:APA91bHOXO0DKTkDVplUte_-itvcPNohcpRCIYFmgSgGn6o9xobk6kkoiibIWP_v5uFYe7EXHyH0NAJvzQIB9XSViQGYn7OIGgW26hzAY4-H3jhbCyB0t9bCNx2WzYF9nT5vFiYutBfb",
                "created_date": "2020-07-25 14:10:46"
            },
            "total_utang": "150000",
            "sisa_utang": "150000",
            "tgl_kembali": "2020-10-10 00:00:00",
            "status": "1",
            "keterangan": "kepo lu",
            "selfie": "3ed425415636e023107b27b4f2d33844.jpg",
            "ttd": "askdj ksajd lasjdlksajd jsadkjsakd",
            "created_date": "2020-07-26 09:25:56"
        },
    ]
}

But when i generate that json with final listUtang = list.map((e) => UtangModel.fromJson(e)).toList(); . I have return null on that.

List After Compiled UtangModel(idUtang: null, pembertang: UserGoogleModel(idUser: null, nameUser: null, emailUser: null, imageUser: null, tokenFcm: null, createdDate: null), pengutang: UserGoogleModel(idUser: null, nameUser: null, emailUser: null, imageUser: null, tokenFcm: null, createdDate: null), totalUtang: null, sisaUtang: null, tglKembali: null, status: 1, keterangan: kepo lu, selfie: 3ed425415636e023107b27b4f2d33844.jpg, ttd: askdj ksajd lasjdlksajd jsadkjsakd, createdDate: null)

In above result json, it's surely have data but after generate it with fromJson it return null. I missing something ?

UtangModel

@freezed
abstract class UtangModel with _$UtangModel {
  const factory UtangModel(
      {String idUtang,
      UserGoogleModel pembertang,
      UserGoogleModel pengutang,
      String totalUtang,
      String sisaUtang,
      DateTime tglKembali,
      String status,
      String keterangan,
      String selfie,
      String ttd,
      DateTime createdDate}) = _UtangModel;
  factory UtangModel.fromJson(Map<String, dynamic> json) => _$UtangModelFromJson(json);
}

UserModel

@freezed
abstract class UserGoogleModel with _$UserGoogleModel {
  const factory UserGoogleModel(
      {String idUser,
      String nameUser,
      String emailUser,
      String imageUser,
      String tokenFcm,
      DateTime createdDate}) = _UserGoogleModel;
  factory UserGoogleModel.fromJson(Map<String, dynamic> json) => _$UserGoogleModelFromJson(json);
}

Pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  freezed_annotation: ^0.11.0
  json_annotation: ^3.0.1

dev_dependencies:
  flutter_test:
    sdk: flutter
  pedantic: ^1.9.0
  flutter_launcher_icons: ^0.7.5
  build_runner: ^1.10.0
  freezed: ^0.11.4
  json_serializable: ^3.3.0

Upvotes: 0

Views: 725

Answers (2)

Akshat Bhuhagal
Akshat Bhuhagal

Reputation: 128

I'm little late for this answer but yeah it might help other's

As from ChessMax answer the problem is with your JsonKey name which is different on API response and Freezed creating JsonKey name something else so to fix this you have to annotate JsonKey on your main Model class. For ex.

@freezed
abstract class UtangModel with _$UtangModel {
    const factory UtangModel({
      @JsonKey(name: 'id_utang') String idUtang,
      UserGoogleModel pembertang,
      UserGoogleModel pengutang,
      String totalUtang,
      String sisaUtang,
      DateTime tglKembali,
      String status,
      String keterangan,
      String selfie,
      String ttd,
      DateTime createdDate
    }) = _UtangModel;
    factory UtangModel.fromJson(Map<String, dynamic> json) => _$UtangModelFromJson(json);
  }

here @JsonKey(name: 'id_utang') String idUtang is the solution

Also it's really time taking process to annotate JsonKey for every value on your Model class so for that you can use plugin (if you are using android studio) which auto generate your model class for you with annotate JsonKey

Plugin - https://plugins.jetbrains.com/plugin/16971-dartjsongenerator

Upvotes: 0

ChessMax
ChessMax

Reputation: 2265

The problem is the difference between JSON fields and class fields. You have idUtang field in UtangModel class, but JSON data contains id_utang string. It's a different strings and this is a reason why you have null-s here.

Upvotes: 1

Related Questions