createUri function
Implementation
Uri? createUri(String? url) {
if (url == null || url.length == 0) return null;
try {
var uri = Uri.parse(url);
return uri;
} catch (e) {
//sometimes Uri refuses to parse urls with encodable chars so need to manually parse + reconstruct
var parts = url.split("://");
if (parts.length != 2) throw FormatException("Invalid URL: '${url}'");
var urlParts = splitOnFirst(parts[1], "/");
var relativeUrl = urlParts.length == 1 ? "/" : "/" + urlParts[1]!;
var relativeUrlParts = splitOnFirst(relativeUrl, "?");
var path = relativeUrlParts[0];
Map<String?, String?>? query = null;
if (relativeUrlParts.length == 2) {
query = Map<String?, String?>();
var qs = relativeUrlParts[1]!;
var qsParts = qs.split("&");
for (var qsPart in qsParts) {
var kvp = splitOnFirst(qsPart, "=");
if (kvp.length == 1) continue;
query[kvp[0]] = kvp[1];
}
}
return parts[0] == "https"
? Uri.https(urlParts[0]!, path!, query as Map<String, String>?)
: Uri.http(urlParts[0]!, path!, query as Map<String, String>?);
}
}