Если вы хотите получить JSON на снимке экрана, вам нужно внести несколько изменений.
- Обратите внимание, что в списке продуктов отображаются целые числа без кавычек при преобразовании в JSON, поэтому должны быть сохранены как
int
с в вашем классе дартс. (Обратите внимание на предпочтительный синтаксис тоже.)
var products = <Map<String, int>>[
{
'product_id': 1,
'buy_quantity': 1,
'product_price': 1000,
'is_voucher': 0,
},
{
'product_id': 2,
'buy_quantity': 2,
'product_price': 2000,
'is_voucher': 0,
},
];
Тип
_body
необходимо изменить, поскольку теперь он содержит список, а также строки. (Оставьте то же самое - как
toString
s - так как ваш скриншот показывает, что даже целые числа указаны в виде строк.)
var _body = <String, dynamic>{
'buyer_id': '',
'buyer_firstname': postCart.buyerFirstname,
'phone_number': postCart.phoneNumber,
'transaction_total_price': postCart.transactionTotalPrice.toString(),
'voucher_id': 0.toString(),
'voucher_code': 0.toString(),
'payment_id': postCart.paymentId.toString(),
'payment_name': postCart.paymentName,
'products': products
};
Наконец json и (предпочтительно) utf8 кодируют полученную карту и передают ее в качестве параметра
body
вашего
http.post
.
var bytes = utf8.encode(json.encode(_body));
await http.post(url, body: bytes, headers: someHeaders);
Один из ваших заголовков может быть
content-type: application/json;encoding=utf-8
, чтобы сообщить серверу, что вы отправляете кодировку UTF8 JSON.