Dart query string build and parse
Dart
String buildQuery(Map<String, Object?> params) {
final pairs = <String>[];
params.forEach((key, value) {
if (value == null) return;
if (value is Iterable) {
for (final v in value) {
pairs.add('${Uri.encodeQueryComponent(key)}=${Uri.encodeQueryComponent('$v')}');
}
} else {
pairs.add('${Uri.encodeQueryComponent(key)}=${Uri.encodeQueryComponent('$value')}');
}
});
return pairs.join('&');
}
Map<String, List<String>> parseQuery(String query) {
final out = <String, List<String>>{};
for (final entry in Uri.splitQueryString(query).entries) {
out.putIfAbsent(entry.key, () => <String>[]).add(entry.value);
}
return out;
}