decodeQueryStringParameters function

Map<String, dynamic> decodeQueryStringParameters(
  1. String? queryString, {
  2. String? charset,
})

Decodes queryString, allowing single and multiple values per key.

Implementation

Map<String, dynamic> decodeQueryStringParameters(String? queryString,
    {String? charset}) {
  if (queryString == null || queryString.isEmpty) return {};

  var encoding = getCharsetEncoding(charset);

  var pairs = queryString.split('&');

  var parameters = <String, dynamic>{};

  for (var pair in pairs) {
    if (pair.isEmpty) continue;
    var kv = pair.split('=');

    var k = kv[0];
    var v = kv.length > 1 ? kv[1] : '';

    k = _decodeQueryComponent(k, encoding);
    v = _decodeQueryComponent(v, encoding);

    var prev = parameters[k];

    if (prev == null) {
      parameters[k] = v;
    } else if (prev is List) {
      prev.add(v);
    } else {
      parameters[k] = [prev, v];
    }
  }

  return parameters;
}