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

我使用dart和Flatter作为移动应用程序。我使用api从服务器获取数据。但我发现了一个问题,也许是飞镖的核心问题

我需要向我的URL添加复杂的查询参数,如

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