parse static method

Uri? parse(
  1. String? url, {
  2. String? domain,
})

Implementation

static Uri? parse(String? url, {String? domain}) {
  // null or missing url
  if (url == null || url.trim() == "") return null;

  // fix for fragment # in query parameter
  // encode # to %23
  if (url.contains("#")) {
    var parts = url.split("?");
    if (parts.length > 1) {
      url = "${parts[0]}?${parts[1].replaceAll("#", "%23")}";
    }
  }

  // invalid url?
  Uri? uri = Uri.tryParse(url);
  if (uri == null) return null;

  // url is a data uri?
  if (uri.data != null) return uri;

  // because flutter is a SWA we need to ignore the /#/ for uri query param detection
  if (url.contains("/#")) uri = Uri.tryParse(url.replaceFirst("/#", "/"));
  if (uri == null) return null;

  // remove empty segments
  uri = uri.removeEmptySegments();

  // resolve uri
  uri = uri.toAbsolute(domain: domain);

  // build query parameters
  return uri;
}