HTTP-сообщение Dart со сложным объектом в качестве тела - PullRequest
0 голосов
/ 06 мая 2020

Метод post пакета http пакета Dart принимает в качестве тела запроса только String, List или Map. Мне нужно отправить этот список как тело

     List item = widget.product
    .map((prod) => {
    "product_id": prod.id,
  "product_name": prod.title,
"product_quantity": prod.quantity,
"product_reference": prod.reference
   }).toList();

В Postman я бы построил тело как сырое json

{"id_customer": "null",
"id_adresse": "null",
"id_carrier": "155",
"secure_key": "null",
"payment": "Paiement à la livraison",
"total_paid": "311.0",
"total_product": "298.0",
"total_shipping": "7.0",
"tax": "0.6",
"products": [{"product_id": "5444",
            "product_name": "Batterie adaptable pour ordinateur portable  Asus X550A 2200mAh",
            "product_quantity": "1",
            "product_reference": "null"},
            {"product_id": "5433",
            "product_name": "Batterie originale pour ordinateur portable Asus K52 4400mAh",
            "product_quantity": "1",
            "product_reference": "null"}]}

, и это моя попытка

void addorders(String id , String id_adresse,String secure_key,String id_carrier,String paiement,double total,double total_product,double total_shipping,double tax, List products) async {
    final prefs = await SharedPreferences.getInstance();
    final key = 'token';
    final value = prefs.get(key ) ?? 0;

    String myUrl =  "$serverUrl/orders";
final String prod=products.toString();

    http.post(myUrl,
        headers: {
          'Accept':'application/json',
          //"content-type": "application/json",
          'Authorization' : 'JWT $value'
        },
        body: {
          "id_customer":"$id",
          "id_adresse":"$id_adresse",
          "id_carrier":"$id_carrier",
          "secure_key":"$secure_key",
          "payment":"$paiement",
          "total_paid":"$total",
          "total_product":"$total_product",
          "total_shipping":"$total_shipping",
          "tax":"$tax",
          "products":"$prod",

        }).then((response){
     // print('Response status : ${response.statusCode}');
      print('Response body ');
      print(response.request);

     // print('Response body : ${id_carrier}');
    }
    );
  }

Я использую String encoded = json .encode (theMap), но та же проблема, что мой api не читает список продуктов. Помогите, пожалуйста.

1 Ответ

0 голосов
/ 06 мая 2020

Вы должны использовать конвертеры, чтобы получить классы дротиков, которые вычисляют ваши json данные и обрабатывают их, вместо того, чтобы передавать ваши значения, как вы.

Вы можете использовать это JSON в Dart например. Вам просто нужно вставить свои json данные от почтальона, чтобы вернуть свой класс дротиков

После вам просто нужно будет вызвать метод toJson() вашего класса, чтобы получить карту для тела вашего запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...