如何在 Flutter 包/插件开发中添加资产?
Posted
技术标签:
【中文标题】如何在 Flutter 包/插件开发中添加资产?【英文标题】:How to add assets in flutter Package/Plugin development? 【发布时间】:2019-07-11 10:49:01 【问题描述】:我正在开发一个包含一些资产文件的颤振包。我像往常一样在 pubsepc.yaml 中提到了所需的资产
assets:
- assets/abc.xyz
并将包上传到https://pub.dartlang.org/。
之后我创建了一个颤振应用程序并将我开发的包导入pubspec.yaml
就像...
dependencies:
flutter:
sdk: flutter
my_developed_package: ^0.0.1
现在一切正常,除了我的资产不存在。
我在我的应用程序中放置了一些资产,而在pubsepc.yaml
及其工作中没有提及。我无法理解,如何将这些资产添加到我的包中以便它们自动加载?
【问题讨论】:
【参考方案1】:引用from
如果在 pubspec.yaml 文件中指定了所需的资产 包,它会自动与应用程序捆绑在一起。在 特别是,包本身使用的资产必须在其 pubspec.yaml。
在 Flutter 中,您可以使用包中的资产,这应该不是问题。唯一的事情是,您需要指定您的包并导入它。例如。如果是图片,可以使用AssetImage
类,它是package
属性。
AssetImage('assets/abc.xyz', package: 'my_developed_package');
有关如何调用文本和其他内容的更多信息,请查看here。
【讨论】:
我明白了这一点,但我希望他们在有人安装我的插件时自动添加。如何做到这一点? 如果您在编辑后的答案中看到引用的信息,您可以看到,打包资产自动绑定到应用程序。 只有 AssetImage 允许你指定一个包。如果你想加载一个 json 文件,它就不起作用,而且我发现文档很难理解。它指出您可以拥有未在 pubspec.yaml 中定义的资产,但在下一句中仍然说您必须在 pubspec.yaml 中定义它们。 @eimmer - 您可以拥有多个资产,您可以指定一些但不一定全部可供软件包用户使用。其余的将供您的包裹自己使用,但不会暴露在外界。 非常感谢您的回答。已经找了好几个小时了。只有当我可以选择这个作为最佳答案时,因为下面的答案要实现同样的目标有点艰巨。【参考方案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。
【讨论】:
这是中奖者,谢谢!我花了整个上午试图让我的包加载它自己的 JSON 文件,并发现颤振文档有点......不清楚。 我想从插件资产中读取 json 文件,你能帮帮我吗? 这可行,但我必须在应用程序的pubspec.yaml
下的assets:
下分别包含每个资产文件。有什么方法可以将所有资产都包含在一个包文件夹下,就像对应用程序中的普通资产一样?
谢谢!我可以确认这行得通。我在包项目的 pubspec.yaml` 中指定了 txt 文件,并通过rootBundle.loadString('packages/package_name/file.txt)
访问它。请注意,该文件位于package_name/lib/file.txt
。无需指定lib
文件夹【参考方案3】:
要从 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】: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 get 如果您正确放置资产,它将显示退出并显示 0 错误,否则它将显示错误背后的原因。
一般来说,初学者都会面临这些类型的问题。随着时间的推移,您将破解解决此错误的方法
【讨论】:
【参考方案5】:将资产添加到 Flutter 包可能会很困难! 只需按照这些步骤,您就可以开始了...
第一步:在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 应用程序执行 冷启动瞧,你完成了。
【讨论】:
如何从包中加载非图像资产?例如.json 还是 .dat 文件?以上是关于如何在 Flutter 包/插件开发中添加资产?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter开发 Flutter 包和插件 ( 开发 Dart 插件包 | 发布 Dart 插件包 )
Flutter开发 Flutter 包和插件 ( Flutter 包和插件简介 | 创建 Flutter 插件 | 创建 Dart 包 )