Dart URI类QueryParameters如何处理Map值?

时间:2017-08-23 13:54:35

标签: dart

根据文档,它需要遵循: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这是不正确的。

1 个答案:

答案 0 :(得分:1)

我认为对地图没有任何特殊支持。查询参数本身从字符串到字符串或字符串到字符串列表的映射。

在将其作为查询参数传递之前,首先需要将其他所有内容都添加到此格式中。

一种简单的方法是对地图进行JSON编码,并将结果字符串作为单个查询参数传递。