Uri抽象 接口

已解析的URI,例如URL。

要使用特定组件创建URI,请使用 Uri.new

var httpsUri = Uri(
    scheme: 'https',
    host: 'dart.dev',
    path: '/guides/libraries/library-tour',
    fragment: 'numbers');
print(httpsUri); // https://dart.ac.cn/guides/libraries/library-tour#numbers

httpsUri = Uri(
    scheme: 'https',
    host: 'example.com',
    path: '/page/',
    queryParameters: {'search': 'blue', 'limit': '10'});
print(httpsUri); // https://example.com/page/?search=blue&limit=10

final mailtoUri = Uri(
    scheme: 'mailto',
    path: '[email protected]',
    queryParameters: {'subject': 'Example'});
print(mailtoUri); // mailto:[email protected]?subject=Example

HTTP和HTTPS URI

要使用https方案创建URI,请使用 Uri.httpsUri.http

final httpsUri = Uri.https('example.com', 'api/fetch', {'limit': '10'});
print(httpsUri); // https://example.com/api/fetch?limit=10

文件URI

要从文件路径创建URI,请使用 Uri.file

final fileUriUnix =
    Uri.file(r'/home/myself/images/image.png', windows: false);
print(fileUriUnix); // file:///home/myself/images/image.png

final fileUriWindows =
    Uri.file(r'C:\Users\myself\Documents\image.png', windows: true);
print(fileUriWindows); // file:///C:/Users/myself/Documents/image.png

如果URI不是文件URI,则调用此方法会抛出 UnsupportedError.

目录URI

类似于Uri.file,但是非空URI路径以斜杠结尾。

final fileDirectory =
    Uri.directory('/home/myself/data/image', windows: false);
print(fileDirectory); // file:///home/myself/data/image/

final fileDirectoryWindows = Uri.directory('/data/images', windows: true);
print(fileDirectoryWindows); //  file:///data/images/

从字符串创建URI

要使用字符串创建URI,请使用Uri.parseUri.tryParse

final uri = Uri.parse(
    'https://dart.ac.cn/guides/libraries/library-tour#utility-classes');
print(uri); // https://dart.ac.cn
print(uri.isScheme('https')); // true
print(uri.origin); // https://dart.ac.cn
print(uri.host); // dart.dev
print(uri.authority); // dart.dev
print(uri.port); // 443
print(uri.path); // guides/libraries/library-tour
print(uri.pathSegments); // [guides, libraries, library-tour]
print(uri.fragment); // utility-classes
print(uri.hasQuery); // false
print(uri.data); // null

另请参阅

构造函数

Uri({String? scheme, String? userInfo, String? host, int? port, String? path, Iterable<String>? pathSegments, String? query, Map<String, dynamic>? queryParameters, String? fragment})
从组件创建新的URI。
工厂
Uri.dataFromBytes(List<int> bytes, {String mimeType = "application/octet-stream", Map<String, String>? parameters, bool percentEncoded = false})
创建包含bytes编码的data: URI。
工厂
Uri.dataFromString(String content, {String? mimeType, Encoding? encoding, Map<String, String>? parameters, bool base64 = false})
创建一个包含 content 字符串的 data: URI。
工厂
Uri.directory(String path, {bool? windows})
类似于Uri.file,但是非空URI路径以斜杠结尾。
工厂
Uri.file(String path, {bool? windows})
从一个绝对或相对的文件路径创建一个新的文件 URI。
工厂
Uri.http(String authority, [String unencodedPath, Map<String, dynamic>? queryParameters])
从授权、路径和查询创建一个新的 http URI。
工厂
Uri.https(String authority, [String unencodedPath, Map<String, dynamic>? queryParameters])
从授权、路径和查询创建一个新的 https URI。
工厂

属性

authority String
授权组件。
没有设置器
data UriData?
访问 data: URI 的结构。
没有设置器
fragment String
片段标识组件。
没有设置器
hasAbsolutePath bool
URI 是否有绝对路径(以 '/' 开头)。
没有设置器
hasAuthority bool
URI 是否有 授权 组件。
没有设置器
hasEmptyPath bool
URI 是否有空路径。
没有设置器
hasFragment bool
URI 是否有片段部分。
没有设置器
hashCode int
返回一个计算出的哈希码,计算方法为 toString().hashCode
没有设置器重写
hasPort bool
URI 是否具有显式端口。
没有设置器
hasQuery bool
URI 是否有查询部分。
没有设置器
hasScheme bool
URI 是否有方案组件。
没有设置器
host String
授权组件的 机部分。
没有设置器
isAbsolute bool
URI 是否是绝对的。
没有设置器
origin String
返回 URI 的原始形式,对于 http 和 https 方案为 scheme://host:port。
没有设置器
path String
路径组件。
没有设置器
pathSegments List<String>
将 URI 路径拆分为它的段。
没有设置器
port int
授权组件的端口部分。
没有设置器
query String
查询组件。
没有设置器
queryParameters Map<String, String>
根据 HTML 4.01 规范第 17.13.4 节 中的规则,将 URI 查询拆分为地图。
没有设置器
queryParametersAll Map<String, List<String>>
根据 HTML 4.01 规范第 17.13.4 节 中的规则,将 URI 查询拆分为地图。
没有设置器
runtimeType Type
对象运行时类型的表示。
没有设置器继承
scheme String
URI 的方案组件。
没有设置器
userInfo String
授权组件的用户信息部分。
没有设置器

方法

isScheme(String scheme) bool
这个Uri方案的类型是否为schema
normalizePath() Uri
返回一个路径已被规范化的URI。
noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时调用。
继承
removeFragment() Uri
创建一个Uri,它与此对象不同,没有片段。
replace({String? scheme, String? userInfo, String? host, int? port, String? path, Iterable<String>? pathSegments, String? query, Map<String, dynamic>? queryParameters, String? fragment}) Uri
根据这个URI创建一个新的URI,但与原URI的一些部分不同。
resolve(String reference) Uri
reference解析为相对于this的URI。
resolveUri(Uri reference) Uri
reference解析为相对于this的URI。
toFilePath({bool? windows}) String
从文件URI创建一个文件路径。
toString() String
URI的规范化字符串表示。
override

运算符

operator ==(Object other) bool
URI等于具有相同规范化表示的另一个URI。
override

静态属性

base Uri
当前平台的自然基础URI。
没有设置器

静态方法

decodeComponent(String encodedComponent) String
解码 encodedComponent 中的百分编码。
decodeFull(String uri) String
解码 uri 中的百分编码。
decodeQueryComponent(String encodedComponent, Encoding encoding = utf8}) String
解码 encodedComponent 中的百分编码,将加号转换为空格。
encodeComponent(String component) String
使用百分编码对字符串 component 进行编码,以在作为URI组件的文本中使用。
encodeFull(String uri) String
使用百分编码对字符串 uri 进行编码,以在作为完整URI的文本中使用。
encodeQueryComponent(String component, {Encoding encoding = utf8}) String
根据HTML 4.01编码规则将字符串 component 进行编码。
parse(String uri, [int start = 0, int? end]) Uri
通过解析URI字符串创建一个新的 Uri 对象。
parseIPv4Address(String host) List<int>
host 解析为IP版本4 (IPv4) 地址,并以网络字节顺序(大端)返回地址作为4字节的列表。
parseIPv6Address(String host, [int start = 0, int? end]) List<int>
host 解析为 IP 版本 6 (IPv6) 地址。
splitQueryString(String query, {Encoding encoding = utf8}) Map<String, String>
根据 HTML 4.01 规范第 17.13.4 节 中指定的规则将 query 分解为映射。
tryParse(String uri, [int start = 0, int? end]) Uri?
通过解析URI字符串创建一个新的 Uri 对象。