我正在使用软件包http创建发布请求。 我的代码是
final params = {
'cartItem': {
'sku': product.sku,
'qty': '1',
'quote_id': "xxxxx",
'price': product.price.toString()
}
};
final body = jsonEncode(params);
var uri = Uri.parse(ClientConfigs.loadBasicURL()+APIPath.guestCartsPath+quoteID+"/items");
uri = uri.replace(queryParameters: params);
final response = await http.post(uri, headers: {'Authorization': 'Bearer ' + ClientConfigs.accessToken}, body: body);
它破裂了,但有一个例外
type '_InternalLinkedHashMap<String, String>' is not a subtype of type 'Iterable<dynamic>'
它指向uri.dart类中的这段代码:
queryParameters.forEach((key, value) {
if (value == null || value is String) {
writeParameter(key, value);
} else {
Iterable values = value; // Here is the broken point
for (String value in values) {
writeParameter(key, value);
}
}
});
所以我的问题是如何使用像我这样的嵌套主体进行发布请求。 谢谢您的帮助。
更新:谢谢@ChennaReddy问题是我正在添加对queryParameters无效的uri = uri.replace(queryParameters: params);
。
而且我注意到我需要将''更改为“”,例如:“ cartItem”而不是'cartItem',我不确定Dart的编码,但是要进行更改才能使请求生效。
答案 0 :(得分:0)
由于此行而发生此错误:
uri = uri.replace(queryParameters: params);
这样做的目的是用新参数替换uri参数,这是一个示例:
var uri = Uri.parse("http://www.example.com/?q=test");
final replaceParams = {"q":"othertest"};
uri = uri.replace(queryParameters: replaceParams);
print(uri);
输出为:
I/flutter ( 6060): http://www.example.com/?q=othertest
因此,这些是GET
请求的参数。
在您的情况下,您将uri.replace()
与GET
参数混淆,并在其中传递POST
参数。因此,似乎您不需要调用uri.replace()
方法,这将解决此错误。