以复杂对象为主体的Dart HTTP Post

问题描述 投票:0回答:1

Dart http包的post方法只接受String、List或Map作为请求体。我需要发送这个列表作为body

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

在Postman中,我将以raw 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不读取列表产品。

json http flutter post dart
1个回答
0
投票

你应该使用转换器来获得dart类,它可以计算你的json数据并处理它,而不是像你这样传递你的值。

你可以使用这个 JSON到Dart 比如说,你只需要从postman中粘贴你的json数据就可以得到你的dart类。你只需要从postman中粘贴你的json数据,就可以得到你的dart类。

之后,你只需要拨打 toJson() 方法来获取请求主体的地图。

© www.soinside.com 2019 - 2024. All rights reserved.