splitQueryString static method

Map<String, String> splitQueryString(
  1. String query, {
  2. Encoding encoding = utf8,
})

Splits the query into a map according to the rules specified for FORM post in the HTML 4.01 specification section 17.13.4.

Each key and value in the returned map has been decoded. If the query is the empty string, an empty map is returned.

Keys in the query string that have no value are mapped to the empty string.

Each query component will be decoded using encoding. The default encoding is UTF-8.

Example:

final queryStringMap =
    Uri.splitQueryString('limit=10&max=100&search=Dart%20is%20fun');
print(jsonEncode(queryStringMap));
// {"limit":"10","max":"100","search":"Dart is fun"}

Implementation

static Map<String, String> splitQueryString(
  String query, {
  Encoding encoding = utf8,
}) {
  return query.split("&").fold({}, (map, element) {
    int index = element.indexOf("=");
    if (index == -1) {
      if (element != "") {
        map[decodeQueryComponent(element, encoding: encoding)] = "";
      }
    } else if (index != 0) {
      var key = element.substring(0, index);
      var value = element.substring(index + 1);
      map[decodeQueryComponent(
        key,
        encoding: encoding,
      )] = decodeQueryComponent(value, encoding: encoding);
    }
    return map;
  });
}