【问题标题】:How to access assets in package如何访问包中的资产
【发布时间】:2021-01-02 23:26:25
【问题描述】:

原题来自flutterissue 32799

我开发了一个 dart 包,我需要在运行时加载一些 json 文件,但是当我这样做时会发生错误。加载图片没问题,代码:

void main() {
  Future<void> loadAsset() async {
    String value = await rootBundle
        .loadString('lib/src/assets/JsonConfig/test.json');

    //Image img = Image.asset('lib/src/assets/default-logo.png');
  }

  test('adds one to input values', () async {
    await loadAsset();
  });
}

我的 pubspec.yaml 文件如下:

flutter:
  # To add assets to your package, add an assets section, like this:
   assets:
   - lib/src/assets/default-logo.png
   - lib/src/assets/JsonConfig/test.json
   - lib/src/assets/

【问题讨论】:

    标签: flutter flutter-dependencies flutter-packages


    【解决方案1】:

    要从包中加载资源,您应该添加前缀 'packages/&lt;package_name&gt;/' 以使其正常工作。

    比如AssetImage是怎么做的

    /// The name used to generate the key to obtain the asset. For local assets
    /// this is [assetName], and for assets from packages the [assetName] is
    /// prefixed 'packages/<package_name>/'.
    String get keyName => package == null ? assetName : 'packages/$package/$assetName';
    

    https://github.com/flutter/flutter/blob/fba99f6cf9a14512e461e3122c8ddfaa25394e89/packages/flutter/lib/src/painting/image_resolution.dart#L146

    所以添加前缀 'packages/&lt;package_name&gt;/' 的密钥将在上面的演示中工作:

    String value = await rootBundle
         .loadString('packages/<package_name>/lib/src/assets/JsonConfig/test.json');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-23
      • 2020-10-20
      • 2013-02-09
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      相关资源
      最近更新 更多