【问题标题】:How to load resource files or package: URIs in Dart?如何加载资源文件或包:Dart 中的 URI?
【发布时间】:2015-08-10 07:18:02
【问题描述】:

有一种方法可以获取当前执行脚本的路径,然后找到相对于该位置的资源文件,但不能保证应用发布时目录结构相同。

Dart 是否提供了一种通用的方式来加载资源(文件、数据等),这种方式也适用于 pub runpub global run

问另一种方式,如何在运行时在 Dart 应用程序中动态加载 package: URI 的内容?

【问题讨论】:

    标签: dart


    【解决方案1】:

    更新 resource 包已发布。

    更新 这正在重做。 Resource 类将被移动到一个包中。

    原创

    Dart 中有一个新的 Resource 类(用 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 uri,但在使用相对路径时使用 pub runpub 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/

    【讨论】:

    • 从 pub.dartlang.org 全局激活包时是否有效?
    • 有趣的问题。我还没有发布一个我可以尝试的。
    • 刚试过。还不行:Could not resolve a package location for base at file:///Users/sethladd/.pub-cache/global_packages/resourcetest/bin/resourcetest.dart.snapshot
    猜你喜欢
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2013-03-22
    相关资源
    最近更新 更多