Api 如何使用复杂查询创建url
我使用dart和Flatter作为移动应用程序。我使用api从服务器获取数据。但我发现了一个问题,也许是飞镖的核心问题 我需要向我的URL添加复杂的查询参数,如Api 如何使用复杂查询创建url,api,flutter,dart,Api,Flutter,Dart,我使用dart和Flatter作为移动应用程序。我使用api从服务器获取数据。但我发现了一个问题,也许是飞镖的核心问题 我需要向我的URL添加复杂的查询参数,如 Map<String, Map<String, List<String>>>{"a": {"b": ["c","d"]}, "e": {}} 所以我的问题是dart中有一些方法可以将我的查询参数添加到url中,或者我需要自己创建它?我已经修改了原来的方法,现在它可以工作了 class UrlCrea
Map<String, Map<String, List<String>>>{"a": {"b": ["c","d"]}, "e": {}}
所以我的问题是dart中有一些方法可以将我的查询参数添加到url中,或者我需要自己创建它?我已经修改了原来的方法,现在它可以工作了
class UrlCreator {
static String addQueryParams(String url, Map<String, dynamic> queryParams) {
var result = StringBuffer();
var separator = "";
void writeParameter(String key, String value) {
result.write(separator);
separator = "&";
result.write(Uri.encodeQueryComponent(key));
if (value != null && value.isNotEmpty) {
result.write("=");
result.write(Uri.encodeQueryComponent(value));
}
}
void buildQuery(Map queryParams, {parentKey}){
queryParams.forEach((key, value){
print("parentKey = $parentKey Key = $key value = $value");
if (value == null || value is String) {
var newKey = parentKey != null ? "$parentKey[$key]" : key;
writeParameter(newKey, value);
} else if (value is Map) {
buildQuery(value, parentKey: key);
} else {
Iterable values = value;
var newKey = parentKey != null ? "$parentKey[$key][]" : "$key[]";
for (String value in values) {
writeParameter(newKey, value);
}
}
});
}
buildQuery(queryParams);
return url + "?" + result.toString();
}
}
类UrlCreator{
静态字符串addQueryParams(字符串url、映射queryParams){
var result=StringBuffer();
var分隔符=”;
void writeParameter(字符串键、字符串值){
结果。写入(分隔符);
分隔符“&”;
write(Uri.encodeQueryComponent(key));
if(value!=null&&value.isNotEmpty){
结果。写入(“=”);
write(Uri.encodeQueryComponent(value));
}
}
void buildQuery(映射查询参数,{parentKey}){
queryParams.forEach((键,值){
打印(“parentKey=$parentKey=$Key value=$value”);
如果(值==null | |值为字符串){
var newKey=parentKey!=null?“$parentKey[$key]”:key;
writeParameter(newKey,value);
}else if(值为Map){
buildQuery(值,parentKey:key);
}否则{
Iterable值=值;
var newKey=parentKey!=null?“$parentKey[$key][]”:“$key[]”;
for(值中的字符串值){
writeParameter(newKey,value);
}
}
});
}
buildQuery(查询参数);
返回url+“?”+result.toString();
}
}
您希望它变成什么URL查询字符串<代码>a=某物&e=其他某物?请填补空白。@RichardHeap类似于此的内容
?选项[option\u volume][]=30ml和选项[option\u volume][]=60ml和属性[attributes\u color\u shade][]=brown和属性[attributes\u producer][]=worldwirected
class UrlCreator {
static String addQueryParams(String url, Map<String, dynamic> queryParams) {
var result = StringBuffer();
var separator = "";
void writeParameter(String key, String value) {
result.write(separator);
separator = "&";
result.write(Uri.encodeQueryComponent(key));
if (value != null && value.isNotEmpty) {
result.write("=");
result.write(Uri.encodeQueryComponent(value));
}
}
void buildQuery(Map queryParams, {parentKey}){
queryParams.forEach((key, value){
print("parentKey = $parentKey Key = $key value = $value");
if (value == null || value is String) {
var newKey = parentKey != null ? "$parentKey[$key]" : key;
writeParameter(newKey, value);
} else if (value is Map) {
buildQuery(value, parentKey: key);
} else {
Iterable values = value;
var newKey = parentKey != null ? "$parentKey[$key][]" : "$key[]";
for (String value in values) {
writeParameter(newKey, value);
}
}
});
}
buildQuery(queryParams);
return url + "?" + result.toString();
}
}