如何在 flutter Package/Plugin 开发中添加资源?

How to add assets in flutter Package/Plugin development?

我正在开发一个包含一些资产文件的 flutter 包。我像往常一样在 pubsepc.yaml 中提到了所需的资产

  assets:
    - assets/abc.xyz

并将包上传到 https://pub.dartlang.org/

之后,我创建了一个 flutter 应用程序,并在 pubspec.yaml 中导入了我开发的包,例如...

dependencies:
  flutter:
    sdk: flutter
  my_developed_package: ^0.0.1

现在一切正常,除了我的资产不存在。 我在我的应用程序中放置了一些资产,但没有在 pubsepc.yaml 中提及及其工作。我无法理解,如何将这些资产添加到我的包中以便它们自动加载?

引用from

If the desired asset is specified in the pubspec.yaml file of the package, it is bundled automatically with the application. In particular, assets used by the package itself must be specified in its pubspec.yaml.

在 Flutter 中你可以使用包中的资源,这应该不是问题。唯一的问题是,您需要指定您的包并导入它。例如。如果是图片,你可以使用 AssetImage class 并且它是 package 属性。

AssetImage('assets/abc.xyz', package: 'my_developed_package');

有关如何调用文本和其他内容的更多信息,请查看here

以下方法帮助我在插件开发中包含资产(不仅是图像,还有任何类型的文件)。

我将我的资产放在 lib 文件夹下,如 my_plugin/lib/assetspubspec.yaml 中。

  assets:
    - packages/my_plugin/assets/asset_name
       
  # Be careful about indentation

It is mandatory to put your plugin assets in the lib directory, in other directories it won't work.

它已经用插件添加了,然后我用这样的路径访问它们 packages/my_plugin/assets/asset_name,例如

File myAsset = File("packages/my_plugin/assets/asset_name");

通过这种方法,我不仅可以从图像中获取资源,还可以从插件中获取资源。

完整的例子可以查看我的插件here.

Pubspec yaml 对缩进敏感

有区别

 assets:
  - packages/my_plugin/assets/asset_name

VS

 assets:
   - packages/my_plugin/assets/asset_name

如果仔细观察以上两个,就会发现pubspec.yaml非常敏感

总是写

assets:
  -asset/yourasset/example1

行首必须有两个空格

将资产 link 添加到 pubspec 后,您必须 运行 packages get 如果您正确放置资产,它将显示 0 错误的退出,否则它将告诉您错误背后的原因。

一般来说,初学者都会遇到这些类型的问题。随着时间的推移,您将找到解决此错误的方法

要从 package 依赖项加载图像,必须将包参数提供给 AssetImage

例如,假设您的应用程序依赖于名为 my_icons 的包,它具有以下目录结构:

.../pubspec.yaml
.../icons/heart.png
.../icons/1.5x/heart.png
.../icons/2.0x/heart.png
...etc.

要加载图像,请使用:

AssetImage('icons/heart.png', package: 'my_icons')

包本身使用的资产也应使用上述 package 参数获取。

将资产添加到 Flutter 包中可能会很困难!
只需按照以下步骤操作即可...

第 1 步:在 Package

的根目录中创建一个 assets 文件夹

第 2 步:将其添加到您的 pubspec.yaml 文件

flutter:
  assets:
    - assets/asset_name

# Mind the indentation

第 3 步:使用 资产,用于图像文件

AssetImage('assets/asset_name.png', package: 'your_package_name')

运行 Pub.dev 并使用包和

瞧,大功告成。