如何访问包中的资源

8
原始问题来源于Flutter的issue 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/
2个回答

17

要从软件包中加载资源,您应该为其键添加前缀'packages/<package_name>/',以使其正常工作。

就像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/<package_name>/'将起作用:

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

1
起初我遇到了一个错误。但是后来,我移除了/lib/src,然后它就正常工作了。 - Zenko

0
如何在Flutter中使用外部包中的资源
模块a带有图标:
  1. pubspec.yaml
name: module_a

environment:
  sdk: '>=3.1.3 <4.0.0'

dependencies:
  flutter:
    sdk: flutter

flutter:
  assets:
    - lib/

将图标移动到lib/active.svg。
模块b,带有图标依赖。
  1. pubspec.yaml
name: module_b

environment:
  sdk: '>=3.1.3 <4.0.0'

dependencies:
  flutter:
    sdk: flutter

  flutter_svg: ^2.0.8
  module_a:
    path: ../module_a

flutter:
  assets:
    - packages/module_a/active.svg


在lib/main.dart中进行试驾。
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SvgPicture.asset('packages/module_a/active.svg'),
    );
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接