如何加载资源文件或包:Dart 中的 URI?
How to load resource files or package: URIs in Dart?
有一种方法可以获取当前执行脚本的路径,然后找到相对于该位置的资源文件,但不能保证应用发布时目录结构相同
Dart 是否提供了一种通用的方式来加载资源(文件、数据等),其方式也适用于 pub run
或 pub global run
?
换个方式问,如何在运行时在 Dart 应用程序中动态加载 package:
URI 的内容?
更新
resource 包已发布。
更新
这正在返工。 Resource
class 将被移动到一个包中。
原创
Dart 中有一个新的 Resource
class(使用 Dart VM version: 1.12.0-edge.d4d89d6f12b44514336f1af748e466607bcd1453 (Fri Aug 7 19:38:14 2015)
测试)
resource_example/lib/resource/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/
有一种方法可以获取当前执行脚本的路径,然后找到相对于该位置的资源文件,但不能保证应用发布时目录结构相同
Dart 是否提供了一种通用的方式来加载资源(文件、数据等),其方式也适用于 pub run
或 pub global run
?
换个方式问,如何在运行时在 Dart 应用程序中动态加载 package:
URI 的内容?
更新 resource 包已发布。
更新
这正在返工。 Resource
class 将被移动到一个包中。
原创
Dart 中有一个新的 Resource
class(使用 Dart VM version: 1.12.0-edge.d4d89d6f12b44514336f1af748e466607bcd1453 (Fri Aug 7 19:38:14 2015)
测试)
resource_example/lib/resource/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/