flutter 类型“_InternalLinkedHashMap〈String,String>"不是类型”Iterable“的子类型< dynamic>

rqdpfwrv  于 2023-03-04  发布在  Flutter
关注(0)|答案(1)|浏览(184)

我正在使用包http创建一个post请求。

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);
        }
      }
    });

如何做一个像我的嵌套体后请求?

baubqpgj

baubqpgj1#

发生此错误是由于以下行:

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

相关问题