根据文档,它需要遵循:https://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4的表单帖子规则。在查看这些信息时,就复杂的对象或地图而言,它并没有给我太多的帮助。
现在,如果我有一个列表例如:列表中的每个项目都需要进行字符串化。
var params = {"list": [1,2,3]};
// needs to be stringed.
params["list"] = params["list"].map((item)=>item.toString()).toList();
简单。此外,所有基本项目也必须是一个字符串
var params = {"number": 1, "boolean": true};
params = params.forEach((k,v)=> params[k].toString());
但我们如何处理地图?
var params = {"map": {"a":1,"b":"foo","c":false,"d":[]}};
// ??
似乎在我的应用程序和飞镖垫中进行测试后,您需要确保所有内容都是字符串,所以我试图想出一种方法来有效地覆盖列表,地图以及可能更复杂的编码对象。
var params = {};
params["list"] = [1,2,3];
params["number"] = 1;
params["boolean"] = true;
params["map"] = {"a":1,"b":"foo","c":false,"d":[]};
params.forEach((String key, dynamic value){
if(value is List){
params[key] = value.map((v)=>v.toString()).toList();
}else if(value is Map){
// ????
}else{
params[key] = value.toString();
}
//maybe have an additional one for custom classes, but if they are being passed around they should already have their own JSON Parsing implementations.
}
理想情况下,结果会传递到:
Uri myUri = new Uri(queryParameters: params);
现在,虽然我解决了列表问题,但它并不喜欢接收地图。我的一部分只想整个地图字符串,但我不确定是否有更好的方法。我知道当有人意外地对数组进行字符串化时,它没有给我:?id = 1& id = 2而是?id =%5B1%2C2%5D这是不正确的。
答案 0 :(得分:1)
我认为对地图没有任何特殊支持。查询参数本身是从字符串到字符串或字符串到字符串列表的映射。
在将其作为查询参数传递之前,首先需要将其他所有内容都添加到此格式中。
一种简单的方法是对地图进行JSON编码,并将结果字符串作为单个查询参数传递。