有一种方法可以获取当前正在执行的脚本的路径,然后找到相对于此位置的资源文件,但无法保证在发布应用程序时目录结构相同。
Dart是否提供了一种通用方式来加载资源(文件,数据......),其方式也适用于pub run
或pub global run
?
问另一种方法,如何在运行时动态加载Dart应用程序中package:
URI的内容?
答案 0 :(得分:5)
<强>更新强> resource包已发布。
<强>更新强>
这正在重新设计。 Resource
类将被移动到包中。
<强>原始强>
Dart中有一个新的Resource
类(使用Dart VM version: 1.12.0-edge.d4d89d6f12b44514336f1af748e466607bcd1453 (Fri Aug 7 19:38:14 2015)
测试)
<强> resource_example / LIB /资源/ sample.txt的强>
Sample text file.
<强> resource_example / bin中/ main.dart 强>
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
打印
Sample text file.
执行
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 uris,但在使用相对路径时使用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());
}
有关详情,请参阅
- http://blog.sethladd.com/2015/08/dynamically-load-package-contents-with.html
- https://codereview.chromium.org/1276263002/