I have been at this one for hours and I can not figure out what I am doing wrong. I am requesting JSON from a remote server and trying to place it into a model. When I run the below code, I get Unhandled Exception: Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List' in type cast.
Here is the JSON response:
{
"status": 200,
"data": {
"name": "Radio Data",
"month": "Jan 2022",
"data": [
{
"client_id": 172064,
"client_name": "Company LLC",
"value": 150
},
{
"client_id": 202947,
"client_name": "Communications",
"value": 150
},
{
"client_id": 200608,
"client_name": "Broadcasting Company",
"value": 150
},
{
"client_id": 204702,
"client_name": "Broadcasting Group",
"value": 75
},
{
"client_id": 202207,
"client_name": "Broadcasting Company Inc.",
"value": 150
},
{
"client_id": 199586,
"client_name": "Western College",
"value": 300
}
]
}
}
This is the OnAir model
class OnAir {
String? name;
String? month;
List<Data>? data;
OnAir({required this.name, required this.month, required this.data});
OnAir.fromJson(Map<String, dynamic> json) {
name = json['name'];
month = json['month'];
if (json['data'] != null) {
data = <Data>[];
json['data'].forEach((v) {
data?.add(Data.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['name'] = name;
data['month'] = month;
data['data'] = this.data?.map((v) => v.toJson()).toList();
return data;
}
}
class Data {
int? clientId;
String? clientName;
int? value;
Data({required this.clientId, required this.clientName, required this.value});
Data.fromJson(Map<String, dynamic> json) {
clientId = json['client_id'];
clientName = json['client_name'];
value = json['value'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['client_id'] = clientId;
data['client_name'] = clientName;
data['value'] = value;
return data;
}
}
And this is the network call, which I call from another page, using FutureBuilder.
fetchOnAir(int id);
List<OnAir> parseOnAir(String responseBody){
var list = json.decode(responseBody);
var listData = list['data'] as List<dynamic>;
List<OnAir> onAir = listData.map((model) => OnAir.fromJson(model)).toList();
return onAir;
}
Future<List<OnAir>> fetchOnAir(int id) async{
final accessToken = await AuthService().getAccessToken();
final url = AuthService().getServiceUrl() + 'userOnAir?id=$id&access_token=$accessToken';
final response = await http.get(Uri.parse(url));
if(response.statusCode == 200){
return compute(parseOnAir, response.body);
}else{
throw Exception('Request API Error');
}
}
Any guidance would be truly appreciated.