Reputation: 49
I have a json response where there is a list that contains a list, then there is a map in it, I tried to parse it but it failed, what kind of error did I do? Previously I used this method to parse the map that was in the list and it worked
response json
{
"status": "success",
"data": [
{
"id_category": 1,
"category_slug": "cc",
"category_name": "Credit Card",
"data_payment": [
{
"payment_slug": "cc",
"payment_name": "Credit Card",
"payment_logo": "https://cdn.xx.id/assets_midtrans/cc.png"
}
]
}
],
"message": "Success Get Data"
}
mycode
class PaymentMethodListModel {
final String status, message;
final List<_Data> data;
PaymentMethodListModel({
this.status,
this.message,
this.data,
});
factory PaymentMethodListModel.fromJson(Map<String, dynamic> x) {
var list = x['data'] as List;
print(list.runtimeType);
List<_Data> sd = list.map((i) => _Data.fromJson(i)).toList();
return PaymentMethodListModel(
status: x['status'],
data: sd,
message: x['message'],
);
}
}
class _Data {
final String categorySlug, categoryName;
final List<DataPayment> dataPayment;
_Data({
this.categorySlug,
this.categoryName,
this.dataPayment,
});
factory _Data.fromJson(Map<String, dynamic> obj) {
var list = obj['data_payment'] as List;
List<DataPayment> dataPaymentList = list.map((i) => DataPayment.fromJson(i)).toList();
return _Data(
categorySlug: obj['category_slug'],
categoryName: obj['category_name'],
dataPayment: dataPaymentList,
);
}
}
class DataPayment {
final String paymentSlug, paymentName, paymentLogo;
DataPayment({
this.paymentSlug,
this.paymentName,
this.paymentLogo,
});
factory DataPayment.fromJson(Map<String, dynamic> x) => DataPayment(
paymentSlug: x['payment_slug'],
paymentName: x['payment_name'],
paymentLogo: x['payment_logo'],
);
}
error message
The method 'map' was called on null.
Receiver: null
Tried calling: map(Closure: (dynamic) => DataPayment)
Upvotes: 1
Views: 695
Reputation: 1313
Try below code
var paymentListModel = PaymentListModel.fromJson(json.decode(str));
class PaymentListModel {
PaymentListModel({
this.status,
this.data,
this.message,
});
String status;
List<Datum> data;
String message;
factory PaymentListModel.fromJson(Map<String, dynamic> json) => PaymentListModel(
status: json["status"],
data: List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
message: json["message"],
);
Map<String, dynamic> toJson() => {
"status": status,
"data": List<dynamic>.from(data.map((x) => x.toJson())),
"message": message,
};
}
class Datum {
Datum({
this.idCategory,
this.categorySlug,
this.categoryName,
this.dataPayment,
});
int idCategory;
String categorySlug;
String categoryName;
List<DataPayment> dataPayment;
factory Datum.fromJson(Map<String, dynamic> json) => Datum(
idCategory: json["id_category"],
categorySlug: json["category_slug"],
categoryName: json["category_name"],
dataPayment: List<DataPayment>.from(json["data_payment"].map((x) => DataPayment.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"id_category": idCategory,
"category_slug": categorySlug,
"category_name": categoryName,
"data_payment": List<dynamic>.from(dataPayment.map((x) => x.toJson())),
};
}
class DataPayment {
DataPayment({
this.paymentSlug,
this.paymentName,
this.paymentLogo,
});
String paymentSlug;
String paymentName;
String paymentLogo;
factory DataPayment.fromJson(Map<String, dynamic> json) => DataPayment(
paymentSlug: json["payment_slug"],
paymentName: json["payment_name"],
paymentLogo: json["payment_logo"],
);
Map<String, dynamic> toJson() => {
"payment_slug": paymentSlug,
"payment_name": paymentName,
"payment_logo": paymentLogo,
};
}
Upvotes: 2