Reputation: 241
I have following json in my API response :
{
"data": [{
"orderid": "123",
"item_names": [
"item1",
"item2",
"item3",
"item4"
]
}]
}
and i have following model class in dart :
class OrderListResponse {
List<OrderListItemModel> data;
OrderListResponse({this.data});
OrderListResponse.fromJson(Map<String, dynamic> json) {
if (json['data'] != null) {
data = new List<OrderListItemModel>();
json['data'].forEach((v) {
data.add(new OrderListItemModel.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
return data;
}
}
class OrderListItemModel {
String id;
List<String> items;
OrderListItemModel({this.id,
this.items,
});
OrderListItemModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
items = json['item_names'].cast<String>();
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['item_names'] = this.items;
return data;
}
}
When I will get data in API it gives me an error The method 'cast' was called on null. I am not getting why it throws this error. Any solution for this ?
Upvotes: 1
Views: 2673
Reputation: 1741
I recommend you to use this website to convert your jsons
and so on, to fix you're code you need to change
OrderListItemModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
items = json['item_names'].cast<String>();
}
to this
OrderListItemModel.fromJson(Map<String, dynamic> json) {
id = json['orderid'];
items = json["item_names"] == null? [] : List<String>.from(json["item_names"].map((x) => x))
}
Upvotes: 6
Reputation: 769
You had a few mistakes in your code:
string
to an array
.id
but the JSON field is orderid
Try this code:
import 'dart:convert';
void main() {
var js = '''{
"data": [{
"orderid": "123",
"item_names": [
"item1",
"item2",
"item3",
"item4"
]
}]
}''';
var orders = OrderListResponse.fromJson(json.decode(js));
for (var order in orders.data) {
print(order.id);
for (var item in order.items) {
print(item);
}
}
}
class OrderListResponse {
List<OrderListItemModel> data;
OrderListResponse({this.data});
OrderListResponse.fromJson(Map<String, dynamic> json) {
if (json['data'] != null) {
data = new List<OrderListItemModel>();
json['data'].forEach((v) {
data.add(new OrderListItemModel.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
return data;
}
}
class OrderListItemModel {
String id;
List<String> items;
OrderListItemModel({this.id,
this.items,
});
OrderListItemModel.fromJson(Map<String, dynamic> json) {
id = json['orderid'];
items = List<String>.from(json["item_names"].map((x) => x));
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['orderid'] = this.id;
data['item_names'] = this.items;
return data;
}
}
Upvotes: 1