已解析的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 的原始形式,对于 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
静态属性
静态方法
-
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
对象。