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 的源,形式为 scheme://host:port,适用于 http 和 https 方案。
无设置器
path String
路径组件。
无设置器
pathSegments List<String>
将 URI 路径分割为其段。
无设置器
port int
权限组件的端口部分。
无设置器
query String
查询组件。
无设置器
queryParameters Map<String, String>
将 URI 查询分割成地图,根据 HTML 4.01 规范第 17.13.4 节 中指定的 FORM post 规则。
无设置器
queryParametersAll Map<String, List<String>>
返回 URI 查询根据 HTML 4.01 规范第 17.13.4 节 中指定的 FORM post 规则分割成地图。
无设置器
runtimeType Type
对象运行时类型的表示。
无设置器继承
scheme String
URI 的方案组件。
无设置器
userInfo String
权限组件的用户信息部分。
无设置器

方法

isScheme(String scheme) bool
判断此 Uri 的方案是否为 scheme
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,但部分内容已替换。
resolve(String reference) Uri
reference解析为相对于this的URI。
resolveUri(Uri reference) Uri
reference解析为相对于this的URI。
toFilePath({bool? windows}) String
从文件URI创建文件路径。
toString() String
URI的归一化字符串表示形式。
重写

运算符

操作符 ==(Object other) bool
URI 等于具有相同规范表示的另一个 URI。
重写

静态属性

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,用于将 HTML 表单作为查询字符串组件发布。
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 节中指定的 FORM 表单提交规则,将 query 分割成一个映射。
tryParse(String uri, [int start = 0, int? end]) Uri?
通过解析 URI 字符串创建一个新的 Uri 对象。