【问题标题】:Variants and AssetImage in flutter not working颤振中的变体和AssetImage不起作用
【发布时间】:2019-09-03 11:58:43
【问题描述】:

这是我的资产 my_earth.jpg 的文件夹结构。这是我用来获取资产的代码

DecoratedBox(
                decoration: BoxDecoration(
                  image: DecorationImage(
                    image:  AssetImage('assets/image/my_earth.jpg'),
                  ),
                ),
              )

这是我在 pubspec.yaml 中的资产声明

资产: - 资产/图像/ - 资产/视频/

问:只显示主要资产,不显示变体。主要资产的大小为 10x10,当我在 iPad Simulator 中运行它时,它给了我 10x10。我认为它可能会选择变体(尺寸如下:16x16 --> 1.0x、20x20 ---> 2.0x、29x29---> 3.0x 等)。当我使用原始的 1024x1024 时,它显示为 1024x1024。我对如何利用此资产图像加载器和变体来支持多设备感到困惑,(因为 ios 需要 1x(已弃用,因为现在几乎所有设备都支持 Retina)、2x、3x 而 android 需要分布在 dbpi 文件夹中的 4 种图像格式.

请帮助我意识到我做错了什么?

【问题讨论】:

  • 在 pubspec.yaml 中,尝试添加 assets/image/my_earth.jpg 而不是 assets/image
  • 我已经添加了,但它仍然显示 10x10,这是原始文件而不是变体
  • 你能生成正确的链接吗? AssetImage('assets/$_size/my_earth.jpg') _size = '1.0x' ?
  • 是的,当我写显式路径时,例如 AssetImage('assets/5.0x/my_earth.jpg'),它给了我 32x32 大小的图像,这是正确的
  • 你终于解决了这个问题吗?我也遇到了同样的问题..

标签: flutter dart


【解决方案1】:

AFAIK,没有开箱即用的规定来根据操作系统和设备类型指定资产路由。参考 cmets 中的答案,答案如下:

您必须明确指定路径。我的意思是,您必须检测设备类型、屏幕尺寸等,然后指定确切的路径。例如,在我的一个应用程序中,我在 assets 目录中有三个用于语言本地化的 json 文件。并且根据用户的选择,我指向正确的路径

String jsonContent = await rootBundle
        .loadString("assets/locale/localization_${locale.languageCode}.json");

【讨论】:

  • 这就是我遇到的问题。从文档 flutter.dev/docs/development/ui/assets-and-images 中,它没有提到我们需要明确提及路径。如果是这样,为什么需要使用 AssetImage ,当 Image.asset 有做这个功能的时候?
  • 这就像保险的运作方式。您必须事先购买并在使用前随身携带。资产必须在 pubspec.yaml 中声明,然后您可以随时使用它。
猜你喜欢
  • 2020-05-29
  • 1970-01-01
  • 2019-02-01
  • 2018-11-17
  • 2021-02-20
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
相关资源
最近更新 更多