'_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>' in type cast

1,579

Solution 1

I was also facing the same issue, replace

serializers.deserializeWith(UserData.serializer, json.decode(response.body))

with

standardSerializers.deserializeWith(UserData.serializer, json.decode(response.body))

Solution 2

The stack trace could tell you where the error is, so if you have one, it might be useful.

At some point, you are assigning a Map<String, dynamic> value to a variable typed Iterable<dynamic>. That sounds like JSON decoding going wrong, something is assuming a list and getting a map.

There is nothing in the provided code that assumes Iterable<dynamic>, so it's most likely in the json_serializable package that things blow up.

So, are you certain that the JSON input text you have is the correct format for the json_serializable decoder? (I'm not familiar with that package, so I can only guess).

Share:
1,579
vipin agrahari
Author by

vipin agrahari

Android - 5 years Flutter - 2 Years iOS - 1 Year

Updated on December 07, 2022

Comments

  • vipin agrahari
    vipin agrahari over 1 year

    I am trying to use built_value and json_serializable together for parsing json response coming from server to model classes.

    Following are the dependencies:

      built_collection: ^4.0.0
      built_value: ^6.1.4
    dev_dependencies:
      build_runner: ^1.0.0
      built_value_generator: ^6.1.4
      json_serializable: ^1.4.0
    

    Following is the code that I have written

    abstract class UserData implements Built<UserData, UserDataBuilder>{
    
      String get user_first_name;
      String get user_last_name;
      String get user_mobile;
      String get email;
      String get user_type;
      Company get company;
      UserType get type;
    
      UserData._();
      factory UserData([updates(UserDataBuilder b)]) = _$UserData;
      static Serializer<UserData> get serializer => _$userDataSerializer;
    
    }
    
    abstract class Company implements Built<Company, CompanyBuilder>{
    
      String get id;
    
      Company._();
      factory Company([updates(CompanyBuilder b)]) = _$Company;
      static Serializer<Company> get serializer => _$companySerializer;
    
    
    }
    
    
    abstract class UserType implements Built<UserType, UserTypeBuilder>{
    
      String get id;
      UserType._();
      factory UserType([updates(UserTypeBuilder b)]) = _$UserType;
      static Serializer<UserType> get serializer => _$userTypeSerializer;
    
    
    }
    

    Serializers class code :

    @SerializersFor(const [
      UserData
    ])
    
    Serializers serializers = _$serializers;
    
    Serializers standardSerializers =
    (serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();
    

    Following is the response that I am getting from server.

    {
      "user": {
        "id": "505d27b0-acaa-11e8-b916-21359608417b",
        "email": "[email protected]",
        "user_first_name": "Pankaj",
        "user_last_name": "P",
        "user_dob": null,
        "active_status": 1,
        "user_region_id": null,
        "user_base_currency": "USD",
        "user_address": null,
        "is_god_user": 0,
        "is_super_user": 0,
        "profile": null,
        "advanced_search": 0,
        "region": null,
        "company": {
          "id": "24e311f0-acaa-11e8-8750-8de299c7797b",
          "company_name": "SHPR A",
          "company_address": null,
          "company_logo": "",
          "company_constitution": "pvt_ltd",
          "company_email": "[email protected]",
          "state": null,
          "country": null,
          "postal_code": null,
          "date_of_establishment": null,
          "number_of_employees": null,
          "company_turnover": null,
          "vendor_id": null
        },
        "type": {
          "id": "5eeebe55-fdf4-11e7-81f1-ac7ba173bed6",
          "user_type_code": "11",
          "user_type_name": "ADMIN",
          "user_category": "SHIPPER"
        }
      }
    }
    

    Finally I am trying to parse using the following line of code

    serializers.deserializeWith(UserData.serializer, json.decode(response.body))
    

    However I am getting following error

    failed due to: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>' in type cast
    

    Please throw some light into what might be causing this issue.