0

I want convert my response API to model repository in flutter but always get error in type of model use Dio for api request this is my response API :

{
    "success": 1,
    "list": [
        {
            "id": "1",
            "driver_id": "11081",
            "company_id": "9",
            "school_id": "4",
            "status": 1,
            "createdAt": "2022-10-14T09:22:00.000Z",
            "updatedAt": "2022-10-14T09:22:03.000Z"
        },
        {
            "id": "2",
            "driver_id": "11081",
            "company_id": "9",
            "school_id": "5",
            "status": 1,
            "createdAt": "2022-10-14T20:36:47.000Z",
            "updatedAt": "2022-10-14T20:36:49.000Z"
        }
    ]
}

I try get data like this :

Future<List<ServiceEntity>> getAll() async {
    final List<ServiceEntity> services = [];
    try {
      final response = await httpClient.post("v1/teacher/get-list");
      validateResponse(response);

      (response.data['list'] as List).forEach((jsonObject) {
        
        services.add(ServiceEntity.fromJson(jsonObject));
      });
    } on DioError catch (e) {
      exceptionHttpRequest(e);
    }

    return services;
  }

and model is :

class ServiceEntity {
  final int id;


  ServiceEntity.fromJson(Map<String, dynamic> json)
      : id = json['id'];
}

When i build app and debug always get this error : I/flutter (29931):

type 'String' is not a subtype of type 'int'

I test many things but in fact did not understand what is the issue

2 Answers 2

1

The problem is exactly what the error says. String is not a subtype of int.

Look at the data:

  • The "id" is stored as a String.
  • Then you try pull it out in the ServiceEntitys fromJson to an int.

a. Either just store the value as an int, because that's what it is, just b like the success field. b. or parse the string into an int.

Below an example with chatty printing to explain the type changes.

   const data = {
     "id": "1",
   };
   
   try{
     // value stored as a String
     final value = data["id"] as String;
     print(value.runtimeType);
     print(value);
 
     // parse into an int
     final id = int.tryParse(value);
     print(id.runtimeType);
     print(id);
   }catch(e){
     print("ERROR ${e}");
   }
Sign up to request clarification or add additional context in comments.

Comments

0

Your id data type is String on response, to use it as int on model class you can parse to int,

id = int.tryParse(json['id']) ?? 0;

if parser failed, it will get 0.

More about converting json and tryParse

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.