类型'_InternalLinkedHashMap <String,String>'不是类型'Iterable <dynamic>'的子类型[已解决]

时间:2019-10-17 09:06:54

标签: http post flutter nested uri

我正在使用软件包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的编码,但是要进行更改才能使请求生效。

1 个答案:

答案 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()方法,这将解决此错误。