Home > Back-end >  How to Handle API response model class if object is not Available in some situation on Same API Flut
How to Handle API response model class if object is not Available in some situation on Same API Flut

Time:05-07

I need an Help for API response handling. I've created model class to convert API res. My issue is on Type the API response is changed for example

if type = 'Application'

 {
        "status": "success",
        "message": "Active loan Fetched",
        "data": {
            "Application": {
                "id": "",
                "coapp_status": null,
                "status": "pending-document",
                "approved_amount": "3000",
                "processing_fees": "450",
            },
            "type": "Application"
        },
        "timestamp": "2022-05-07 13:05:36",
        "require_update": "yes"
    }

and If type = 'Loan'

  {
        "status": "success",
        "message": "Loan Fetched",
        "data": {
            "Loan": {
                "id": "",
                "policy_id": "",
                "application_id": "",
                "user_id": "",
                "approved_amount": "8000",
                "disbursment_amount": "6552",
                "processing_fees": "1200",
                "interest_rate": "480",
                "pre_emi_interest": "31.5616",
                "totalAmount": 8480,
                "gst_processing_fees": 216,
                "totalDisbursment": 6552.4384,
                "current_emi_date": "10 Jun 22",
                "current_emi_amount": "5088",
                "current_emi_id": "51298",
                
                "viewid": "",
                "customermessage": "Your loan have been approved for Rs.8000"
            },
            "type": "Loan"
           
     
    }

In Data Class The Object will be changed based on type

Error log:

Unhandled Exception: type 'Null' is not a subtype of type 'Map<String, dynamic>'

Model Class:

  Application? application;
  Loan? loan;
  String? type;
  String? sanctionLetter;

  factory Data.fromJson(Map<String?, dynamic> json) => Data(
        application: Application.fromJson(json["Application"]), => **Error if application not Found**
        loan: Loan.fromJson(json["Loan"]), **Error if Loan not found**
        type: json["type"],
        sanctionLetter: json["sanction_letter"],
      );

  Map<String?, dynamic> toJson() => {
        "Application": application!.toJson(),
        "Loan": loan!.toJson(),
        "type": type,
        "sanction_letter": sanctionLetter,
      };
}

CodePudding user response:

I think problem is in null checking:

factory Data.fromJson(Map<String?, dynamic> json) => Data(
        application: json["Application"] ? Application.fromJson(json["Application"]) : null, // **Because it can be null**
        loan: json["Loan"] ? Loan.fromJson(json["Loan"]) : null, // **Because it can be null**
        type: json["type"],
        sanctionLetter: json["sanction_letter"],
      );

UPDATE

application: json["Application"] != null ? Application.fromJson(json["Application"]) : null, // **Because it can be null**
loan: json["Loan"] != nul ? Loan.fromJson(json["Loan"]) : null,

Sorry for previous answer, I forgot to check for null

  • Related