flutter 如何格式化网址?

kxeu7u2r  于 2023-01-27  发布在  Flutter
关注(0)|答案(2)|浏览(208)

我想格式化网址。下面是一个例子:
输入:

www.google.com

google.com

输出:

https://www.google.com/

我需要格式化url,因为我使用的validator函数需要检查文本是否为url,当我输入www.google.comgoogle.com时,它说它不是url,因为它要求文本开头为https
我的代码:

validator: (value) {
  if (value == null) {
    return null;
  }
  if (Uri.parse(value).host.isEmpty) {
    return "Please type a valid url";
  }
},

如果您需要更多信息,请随时发表评论。
如何格式化网址?我将不胜感激任何帮助。谢谢你提前!

s3fp2yjn

s3fp2yjn1#

我在validator函数中添加了一些条件:

validator: (value) => {
  if (value == null) {
    return null;
  }
  if (!value.startsWith("https://")) {
    value = "https://" + value;
  }
  if (!value.startsWith("https://www.") && !value.startsWith("https://")) {
    value = "https://www." + value.substring(8);
  }
  if (Uri.parse(value).host.isEmpty) {
    return "Please type a valid url";
  }
}
7uzetpgm

7uzetpgm2#

我会首先使用类似下面的内容对URL进行消毒:

String ensureScheme(String url) {
  var uri = Uri.tryParse(url);
  if (uri == null || !uri.hasScheme) {
    url = 'https://$url';
  }
  return url;
}

其将仅在没有方案已经存在时添加https URL方案,从而避免对使用其它方案(例如,file:///some/pathmailto:user@example.comssh://user@host.example.comtel:+1-800-555-1212)的URL进行破坏。
此外,请注意您的Uri.parse(value).host.isEmpty检查并不十分正确:

  • 如果给定无法分析的输入(例如':'),Uri.parse将引发异常。您可能应该改用Uri.tryParse
  • 空主机不一定表示URL无效。例如,以下所有主机都为空:
  • file:///some/path
  • mailto:user@example.com
  • x1米11米1x

(But如果你不关心这样的网址,那也没关系。)

相关问题