Uri.file 构造函数

Uri.file(
  1. String path,
  2. {bool? windows}
)

从绝对或相对文件路径创建一个新的文件 URI。

文件路径通过 path 传入。

该路径使用 Windows 或非 Windows 语义进行解释。

使用非 Windows 语义时,斜杠 (/) 用于在输入 path 中分隔路径段。

使用 Windows 语义时,反斜杠 (\) 和正斜杠 (/) 用于在输入 path 中分隔路径段,除非路径以 \\?\ 开头,在这种情况下,只有反斜杠 (\) 分隔路径段。

如果路径以路径分隔符开头,将创建一个绝对 URI(带有 file 方案和一个空的权限)。否则将创建一个没有方案或权限的相对 URI 引用。这一规则有一个例外,即当使用 Windows 语义并且路径以驱动器字母、冒号 (":") 和路径分隔符开头时,将创建一个绝对 URI。

是否使用 Windows 或非 Windows 语义的默认值由 Dart 运行的平台确定。在独立 VM 中运行时,VM 根据操作系统进行检测。在浏览器中运行时,始终使用非 Windows 语义。

要覆盖自动检测要使用的语义,请传入 windows 的值。传入 true 将使用 Windows 语义,传入 false 将使用非 Windows 语义。

使用非 Windows 语义的示例

// xxx/yyy
Uri.file('xxx/yyy', windows: false);

// xxx/yyy/
Uri.file('xxx/yyy/', windows: false);

// file:///xxx/yyy
Uri.file('/xxx/yyy', windows: false);

// file:///xxx/yyy/
Uri.file('/xxx/yyy/', windows: false);

// C%3A
Uri.file('C:', windows: false);

使用 Windows 语义的示例

// xxx/yyy
Uri.file(r'xxx\yyy', windows: true);

// xxx/yyy/
Uri.file(r'xxx\yyy\', windows: true);

file:///xxx/yyy
Uri.file(r'\xxx\yyy', windows: true);

file:///xxx/yyy/
Uri.file(r'\xxx\yyy/', windows: true);

// file:///C:/xxx/yyy
Uri.file(r'C:\xxx\yyy', windows: true);

// This throws an error. A path with a drive letter, but no following
// path, is not allowed.
Uri.file(r'C:', windows: true);

// This throws an error. A path with a drive letter is not absolute.
Uri.file(r'C:xxx\yyy', windows: true);

// file://server/share/file
Uri.file(r'\\server\share\file', windows: true);

如果传入的路径不是一个有效的文件路径,将抛出一个错误。

实现

factory Uri.file(String path, {bool? windows}) = _Uri.file;