如何在Dart中加载资源文件或包:URI?

如何在Dart中加载资源文件或包:URI?,dart,Dart,有一种方法可以获取当前正在执行的脚本的路径,然后找到与此位置相关的资源文件,但不能保证在发布应用程序时目录结构是相同的 Dart是否提供了一种加载资源(文件、数据等)的通用方法,这种方法也适用于发布运行或发布全局运行 问另一个问题,如何在运行时在Dart应用程序中动态加载包的内容:URI?更新 该方案已公布 更新 这是在返工。资源类将被移动到包中 原创 Dart中有一个新的资源类(使用Dart虚拟机版本:1.12.0-edge.D4D89D6f16lang1024 2B44514336F1AF7

有一种方法可以获取当前正在执行的脚本的路径,然后找到与此位置相关的资源文件,但不能保证在发布应用程序时目录结构是相同的

Dart是否提供了一种加载资源(文件、数据等)的通用方法,这种方法也适用于
发布运行
发布全局运行

问另一个问题,如何在运行时在Dart应用程序中动态加载
包的内容:
URI?

更新 该方案已公布

更新 这是在返工。
资源
类将被移动到包中

原创

Dart中有一个新的
资源
类(使用
Dart虚拟机版本:1.12.0-edge.D4D89D6f16lang1024 2B44514336F1AF748E46607BCD1453进行测试)(2015年8月7日星期五19:38:14)

resource\u示例/lib/resource/sample.txt

Sample text file.
main() async {
  var resource = const Resource('package:resource_example/resource/sample.txt');
  print(await resource.readAsString());
  // or for binary resources
  // print(await resource.readAsBytes());
}
资源\u示例/bin/main.dart

Sample text file.
main() async {
  var resource = const Resource('package:resource_example/resource/sample.txt');
  print(await resource.readAsString());
  // or for binary resources
  // print(await resource.readAsBytes());
}
执行

dart bin/main.dart
pub global activate -spath . 
pub global run resource_example:main
印刷品

Sample text file.
执行

dart bin/main.dart
pub global activate -spath . 
pub global run resource_example:main
还打印

Sample text file.
也可以将变量的内容作为资源传递。例如,在单元测试中传递模拟资源可能很方便

const sampleText = "Sample const text";

main() async {
  var uriEncoded = sampleText.replaceAll(' ', '%20');
  var resource = new Resource('data:application/dart;charset=utf-8,$uriEncoded');
  print(await resource.readAsString());
}
也支持任意文件或http URI,但在使用
pub-run
pub-global-run
时,这可能不起作用

main() async {
  var uri = new Uri.file('lib/resource/sample.txt');
  var resource = new Resource(uri.toString());
  print(await resource.readAsString());
}
有关更多详细信息,请参见
-

-

当您从pub.dartlang.org全局激活一个包时,它是否有效?一个有趣的问题。我还没有出版一本可以试用的书,只是试了一下。尚未工作:
无法解析位于的base的包位置file:///Users/sethladd/.pub-cache/global_packages/resourcetest/bin/resourcetest.dart.snapshot