【问题标题】:How to add assets in flutter Package/Plugin development?如何在 Flutter 包/插件开发中添加资产?
【发布时间】: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 及其工作中没有提及。我无法理解,如何将这些资产添加到我的包中以便它们自动加载?

【问题讨论】:

    标签: flutter dart assets flutter-plugin flutter-packages


    【解决方案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/assetspubspec.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 文件?
        猜你喜欢
        • 2019-04-05
        • 2019-12-24
        • 2019-07-21
        • 2021-11-24
        • 2023-04-02
        • 1970-01-01
        • 2019-09-13
        • 2020-12-19
        • 1970-01-01
        相关资源
        最近更新 更多