首页 > 解决方案 > Flutter中POST表单数据中的数组

问题描述

我已经准备好对邮递员的请求,更新我网站上的一组数据并将飞镖代码复制到我的颤振应用程序中,这是邮递员代码

var headers = {
  'Authorization': '...',
  'Cookie': '...'
};
var request = http.MultipartRequest('POST', Uri.parse('my_endpoint'));
request.fields.addAll({
  'fields[0][field_id]': '20',
  'fields[0][group_id]': '1',
  'fields[0][value][]': 'Android Developer',
  'fields[0][value][]': 'Web Developer'
});

request.headers.addAll(headers);

http.StreamedResponse response = await request.send();

if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
}
else {
  print(response.reasonPhrase);
}

问题是Flutter删除了body map中的最后一对,因为它与前一个key相同,所以只有更新操作的结果是Web Developer only,但我认为我的请求只能这样工作,我怎么能处理这个问题。

标签: flutterhttpdart

解决方案


您可以将 formData 中的数组作为{key[value][0]: value1, key[value][1]: value2, ...}. 在这里实现这一目标的一种方法是:

final values = ["Android Developer", "Web Developer"];
Map<String, String> valuesArray = {
  for (var i = 0; i < values.length; i++) 'fields[0][value][$i]': values[i]
};
request.fields.addAll({
  ...valuesArray,
  'fields[0][field_id]': '20',
  'fields[0][group_id]': '1',
});

或者,如果可能,我建议您使用 content-type:json,因为创建 Map<String, dynamic> 主体并使用 jsonEncode 对其进行编码更容易。


推荐阅读