如何在Flutter Package / Plugin开发中添加资产?

时间:2019-02-18 05:02:30

标签: dart flutter

我正在开发一个包含一些资产文件的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中未提及其工作原理。我无法理解,如何将这些资产添加到包装中以便它们自动加载?

5 个答案:

答案 0 :(得分:2)

很抱歉无法提供最新答案,但是以下方法帮助我将资产包括在插件开发中。

我将自己的资产放在lib文件夹下,例如my_plugin/lib/assets,并放在pubspec.yaml之下。

  assets:
    - packages/my_plugin/assets/asset_name

  # Be careful about indentation

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

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

通过这种方法,我不仅可以从图片中获得插件的任何资产。

有关完整示例,您可以检查我的插件here

答案 1 :(得分:1)

引用from

  

如果在服务器的pubspec.yaml文件中指定了所需资产   包,它会与应用程序自动捆绑在一起。在   特别是,包装本身使用的资产必须在包装中指定   pubspec.yaml。

在Flutter中,您可以使用包装中的资产,这应该不是问题。唯一的事情是,您需要指定软件包并导入。例如。如果它是图像,则可以使用AssetImage类,它是package属性。

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

有关如何调用文字和其他内容的详细信息,请检查here

答案 2 :(得分:0)

Pubspec Yaml对缩进敏感

之间有区别
 assets:
  - packages/my_plugin/assets/asset_name

VS

 assets:
   - packages/my_plugin/assets/asset_name

如果您密切注意上面两个,那么您会发现pubspec.yaml非常敏感

总是写

assets:
  -asset/yourasset/example1

行首必须有两个空格。

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

通常,初学者会遇到这类问题。随着时间的流逝,您将找到解决此错误的方法

答案 3 :(得分:0)

要从package依赖项加载图像,必须将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参数来获取包本身使用的资产。

答案 4 :(得分:0)

在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 并使用Package和

对Flutter应用程序进行冷启动

Voila你做完了。