写文章的目的是记录一下学习Flutter过程,二是解惑一下网上流传的Flutter 加载图片其实好多是有坑的,即无法加载图片。画重点了:目前Flutter 加载2倍图,3倍图是没有好的方案的。要想加载痛快的玩只能加载单倍图。
Flutter 中图片资源是放到assets 中的(参考pubspec.yaml),它支持图标、图片、配置文件和其他文本文件等。图片它包含JPEG,GIF,PNG,BMP等等,这些assets中的资源可以在程序运行时被加载。
Flutter 会根据当前设备的分辨率加载不同的图片,定义如下:

  在pubspec.yaml 里声明相关分辨率图片后,AssetImage类自动根据当前分辨率在配合当前配置文件的映射声明可以取对应的图片。使用方式如图:

  ,这样使用就可以自动识别1倍、2倍还是3倍图了。问题:但是这样用真的好吗?为了自适应图片要在pubspec.yaml 文件里关联映射,在demo中这样写没有问题,如果在真实的工程中这样写还行吗?pubspec.yaml 配置文件会庞大无比的很,真正关注有效的信息资源被大部分的图片映射资源淹没。恼火不?针对这个问题开发铁定是无比的痛很,但是有没有其他办法呢?有可以减小这样无意义的配置,pubspec.yaml 配置修改如下:

  把图片资源的路径映射改为目录映射。此时再用 Image(image: AssetImage("images/cartone_select_no.png")) 这种方式是不是就万事无忧了?错,那就要分场景考虑考虑了。场景如下:一、假设没有单倍图的情况下。这种方式就不能自适应2倍图和3倍图了,原因是:在pubspec.yaml文件中没有配置相关映射,根据"images/cartone_select_no.png" 这个相对路径去优先去assets的查找单倍图,如果没有就会终止查找,哪怕在工程目录中有2倍图和3倍图也不会显示图片(在不知道这是不是Flutter的bug, 因为原文是这样描述的,意思就是在 pubspec.yaml 中资源部分的每一项都应与实际文件相对应,当少某个主图时,会按分辨率从低到高的顺序去选择,也就是说1倍图中没有的话会在2倍图中找,2倍图中还没有的话就在3倍图中找。但是一定要用具体的映射吗?)。
二、假设没有单倍图的情况下。如果把路径改为"images/2.0x/cartone_select_no.png",即Image(image: AssetImage("images/2.0x/cartone_select_no.png")) 这时可以展示图片,但是这个2倍图确安1倍图展示的,整整大了一倍,这样的展示也是奇丑无比。不知道这是不是Flutter的bug,在当前分辨率已知的情况下,又能在指定的路径中找到图片为什么不能正常展示呢?原因没有分析出来,如果有哪位大神知道的话,帮忙告知一声。针对这个问题我的解决办法是:

这样就可以正常展示了,但是这样也就意味着你无法再自适应X倍图了。
三、有单倍图的情况下,有2倍图和3倍图时Image(image: AssetImage(“images/cartone_select_no.png”)) 它根据屏幕就可以自适应了。前提是有单倍图。问题来了,你一个工程中会放那么多X倍图吗?

 总结,Flutter 加载图片不像外界传说的那样方便,其实有很多的不足之处的,如果在真实的开发中使用X倍图,就要忽略它的不足,按文中描述的方式进行方可,否则苦海无边。

工程中的测试图片

Flutter 加载图片方法相关推荐

  1. WinForm PictureBox加载图片方法

    private void LoadImage_Click(object sender, EventArgs e) {// 从文件加载pictureBox1.Image = Image.FromFile ...

  2. VC++几种加载图片方法的讨论(附源码)

    目录 1.图片加载的相关说明 2.使用LoadBitmap来加载位图图片 3.使用CImage加载图片

  3. 图片墙瀑布式加载图片方法

    像嘀咕网一样,图片和回复异步以图片墙的方式加载到页面的方法.需要引入附件中的包: 首先在photo.html中显示第一页的内容,图片墙的最外面要有如下div <div style="v ...

  4. html photoswipe原理,PhotoSwipe异步动态加载图片方法

    在开发搜房家居M站的时候,搜房家居装修效果图相册展示效果需要用到PhotoSwipe插件来显示图片. 特点:1. 家居提供的接口,每次只能获取一张图片 2. 装修效果图的张数不限. 3. 从Photo ...

  5. ImageView 加载图片方法

    关于ImageView,常很容易混淆background 和 src 两个属性的特征: (1)background通常指的都是背景,而src指的是内容. (2)当使用src填入图片时,是按照图片大小直 ...

  6. flutter 加载图片

    转载自 https://www.jianshu.com/p/c46545277bbe Image控件即图片控件,是显示图像的控件,Image控件有多种构造函数: new Image,用于从ImageP ...

  7. 加载图片的方法(I)

    1.  通过GDI+加载(加载图片 + 显示图片) (1)先加载图片方法: //方法I //CString转WCHAR(因为Image构造函数参数为宽字符) int l = MultiByteToWi ...

  8. 13-flutter 加载图片

    Image Widget 1 flutter 加载图片的方式 new Image 从ImageProvider 中获取图像 new Image.asset 使用key 从assetBundle 获取图 ...

  9. ios 从assets加载图片_Flutter图片添加水印功能,Flutter保存Widget为图片

    添加水印,两种实现思路,一种是将图片与水印解码,然后混编再编码,另一种是通过Widget的方式合成. 在这里采用的实现思路是使用层叠布局Stack加载图片以及水印部分,水印部分可能是一个现成的图片也可 ...

最新文章

  1. ListView和数据适配器SimpleAdapter例子
  2. egg mysql 连表查询_Egg中使用Sequelize框架关联查询Mysql数据库
  3. if you want to have your life valuable
  4. 8.3控制质量(后续不断完善)
  5. IDEA如何生成get和set方法
  6. C++迭代器使用错误总结
  7. c语言学习-使用指针对三个变量互相赋值
  8. python即时标记_python基础教程总结15——1.即时标记
  9. 驱动等待队列,poll和select编程
  10. Javascript中的单例和模块模式
  11. 微信飞机大战游戏开发
  12. html数据如何分页显示,简单的html数据分页控件封装
  13. web大前端-------初识html
  14. 老中医化妆品是品牌吗
  15. 百度富文本编辑器上传文件到OSS
  16. 黑客入侵16进制密码_密码与密码黑客如何诱骗您入侵您的详细信息
  17. esp32~MP3音频文件学习,app架构
  18. 地图导航中的路径规划算法(综述)
  19. 源码安装 apache 2018-09-13
  20. GBase 8c的易维护性

热门文章

  1. Tessent scanATPG(6)测试向量配置 ,at-speed pattern的生成以及OCC的插入
  2. CentOS7 配置nextcloud
  3. 25、Scratch教程-图章-旋转魔力球
  4. VR全景拍摄中如何正确选择与使用三脚架?
  5. Java的学习路线(非常完整)
  6. 广东工业大学文远知行杯新生程序设计竞赛(牛客比赛)
  7. 疫情防控交流社区平台——3.3 开发社区核心功能
  8. android RecyclerView一步步打造分组效果、类似QQ分组、折叠菜单、分组效果(二)
  9. java 恶搞程序_Java恶搞!强制关闭电脑上的程序进程!
  10. argc参数和argv参数简述