我正在处理一些代码,并注意到:
return new Uri(host: server, path: apiPath, query: query, queryParameters: queryParams);
此代码在整个应用程序中定期执行,唯一的区别是queryParams。所以我打印出来了:
{Id:[1234], enabled:false}
显示它是一个键:值集:Id:List,enabled:boolean。
显示地图,然后显示跟踪。 #6指向上述行。
它看起来是假的...迭代错误的东西就是打破这个。
答案 0 :(得分:1)
在处理URI和查询参数时,它正在寻找数字,列表和字符串,而不是布尔值。要解决此问题并使其正常运行,您需要执行以下操作:
{"enabled": false.toString()}
// or
{"enabled": "false"}
并且uri类将相应地设置查询参数。
Uri类位于Dart的核心库中。当我们使用它时,我们将创建的Uri对象传递给客户端类的动作
Client client = new BrowserClient();
接受url作为参数的一部分。
虽然查看上面的错误,但是Uri类最终无法正确地将错误值解析为可接受的值。
根据Dart语言查看Uri的代码文档:https://api.dartlang.org/dev/1.25.0-dev.7.0/dart-core/Uri/Uri.html
通过query或queryParameters设置查询组件。使用查询时,提供的字符串应该是有效的URI查询,但是如果需要,将转义除一般分隔符之外的无效字符。使用queryParameters时,查询是根据提供的映射构建的。地图中的每个键和值都是百分比编码的,并使用相等和符号字符连接。映射中的值必须是字符串或字符串的Iterable,后者对应于同一个键的多个值。
有理由说所有值必须是String或Iterable of Strings。我唯一想知道的是,在Dartpad中,true和false都有toString函数,但你也可以在那里传递数字。
唯一的结论是,虽然它接受字符串的字符串和Iterables,但它也会解析整数和其他数字,因为它们将显式检查该类型,因为它在URI中很常见。
有人会认为URI会理解布尔值,因为它们也很常见,但由于我无法明确查看dartlang的源代码,所以还有待观察。然而,我确实设法查看它的源代码并缩小范围。 writeComponent指向_Uri._uriEncode,但在查看该函数时,没有代码只是一个定义。
HTH。