解析后的 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.https 或 Uri.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.parse 或 Uri.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。工厂
属性
- 授权组件。无设置器
- 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的归一化字符串表示形式。重写
运算符
静态属性
静态方法
-
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
对象。