How to Handle API response model class if object is not Available in some situation on Same API Flutter Dart

690

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

Share:
690
Mustafa Shaikh
Author by

Mustafa Shaikh

Updated on January 04, 2023

Comments

  • Mustafa Shaikh
    Mustafa Shaikh over 1 year

    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,
          };
    }
    
  • Mustafa Shaikh
    Mustafa Shaikh almost 2 years
    Thank for your response but I'm getting error -> Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'bool'
  • MerdanDev
    MerdanDev almost 2 years
    I have updated, it must solve your problem
  • Mustafa Shaikh
    Mustafa Shaikh almost 2 years
    Thanks brother issue has been solved..