Flutter目前没有支持到像andrid一样自动获取对应环境的变体资源,代码区分多语言取图片资源麻烦且代码可读性不高,为此封装了一个简单的ImageProvider 用来自动匹配资源 。

先讲下用法规则 assets目录下面创建带多语言环境名的目录例如en_xxx

将英文的图片放在此目录下

使用Image控件的时候传入图片路径并且传入自定义的FitAssetImage

Image(image : FitAssetImage('assets/images/lucky_text_icon.png'),fit: BoxFit.fitWidth,width: constraints.biggest.width,
)

用法规则和android开发使用基本一致

原理

Flutter的AssetBundle内部根据图片路径最后一节目录匹配n倍图这里我们继承AssetBundle根据ImageConfiguration.local去优先匹配带有locale文案的路径然后返回

核心代码

  final SplayTreeMap<double, String> mapping = SplayTreeMap<double, String>();for (final String candidate in candidates){Uri url = Uri.parse(candidate);var path = url.pathSegments[url.pathSegments.length - 2];if(path.contains('${config.locale}')){mapping[_parseScale(candidate)] = candidate;}}if(mapping.isEmpty){for (final String candidate in candidates.reversed)if(!Uri.parse(candidate).pathSegments[Uri.parse(candidate).pathSegments.length - 2].contains('_'))mapping[_parseScale(candidate)] = candidate;}

时间原因 写的比较粗略  源码文件放在下方附件中 后面有时间补充对深色主题和sw的适配

自定义Flutter资源变体(variant)相关推荐

  1. 如何判断 变体variant/OleVariant 是否为空

    value : OleVariant; value := wbCharge.OleObject.document.all.item('spwd',0); 如何判断  value 是否有值呢? 如上代码 ...

  2. SAP CRM Opportunity订单的文档流Document Flow的一些变体variant

    Monday, February 1, 2016 2:42 PM 今天我测试Opportunity时发现:SAP Fiori处理doc history,是建立在这样一个前提下:source和targe ...

  3. 配置构建变体build.gradle的配置

    google原文链接 https://developer.android.com/studio/build/build-variants.html#product-flavors 配置构建类型 您可以 ...

  4. Unity 变体探秘

    起因:我们在打Bundle 的时候出现了同一个AB里面有相同文件名字的文件(虽然路径不同),具体报错如下: 14:22:18 Building AssetBundle failed because h ...

  5. [Unity2018.3新功能]Prefab嵌套和变体

    本文节选自洪流学堂公众号专栏<郑洪智的Unity2018课>,未经允许不可转载. 洪流学堂公众号回复专栏,查看更多专栏文章. 大智:"今天我们要学的内容是Prefab中全新的部分 ...

  6. 【ALM】行业方案-Polarion Variant 变体管理 - 选择、变化和决断

    1. 引子 我们生活在连接和定制的梦幻世界,使用社交媒体维系人际关系,每天都依赖着无处不在的即时通讯与朋友和家人保持联系.在社会允许的范围内,我们行使自己的能力来定制我们的世界来满足特定的喜好.我们期 ...

  7. boost::test模块带有自定义初始化测试的静态库使用变体

    boost::test模块带有自定义初始化测试的静态库使用变体 实现功能 C++实现代码 实现功能 boost::test模块带有自定义初始化测试的静态库使用变体 C++实现代码 #include & ...

  8. boost::test模块具有自定义初始化测试的共享库使用变体

    boost::test模块具有自定义初始化测试的共享库使用变体 实现功能 C++实现代码 实现功能 boost::test模块具有自定义初始化测试的共享库使用变体 C++实现代码 #include & ...

  9. VARIANT变体类型数据

    2019独角兽企业重金招聘Python工程师标准>>> 特殊 Variant 是一种特殊的数据类型,除了定长String数据及用户定义类型外,可以包含任何种类的数据.Variant ...

最新文章

  1. TVM Reduction降低算力
  2. rabbitmq怎样确认是否已经消费了消息_【朝夕专刊】RabbitMQ生产者/消费者消息确认...
  3. python中文读音ndarray-Python开发:NumPy学习(一)ndarray数组
  4. 【转】TFS签入签出规范
  5. springboot上传限制1M的大坑
  6. iloc,ix和loc有何不同?
  7. React - 修改children(下)
  8. 英雄无敌Ⅲ之游戏修改器DIY
  9. 桌面上计算机程序包能删吗,不小心卸载了windows驱动程序包(电脑上别乱清理了)...
  10. 检测数据库连接泄漏的最佳方法
  11. python输出到文件里
  12. CSS3 画的哆啦A梦
  13. Django开发微信公众号
  14. sql server远程连接时提示超时的解决办法
  15. 发票 税率 普票 增值税发票
  16. Java之父--Gosling
  17. PEP 8 -- Style Guide for Python Code。Python 代码规范。
  18. 如何将所有电子邮件地址合并到一个Outlook.com收件箱中
  19. 加息和提高存款准备金的影响
  20. 5G走向生活6G布局研发

热门文章

  1. JavaCV音视频开发宝典:rtsp拉流转码方式转推到rtmp
  2. 四线小城市程序员2020年终总结
  3. 5月全球浏览器排行榜:Chrome以58.09%的市场占有率稳居世界第一
  4. ssm毕设项目白酒营销管理gh21y(java+VUE+Mybatis+Maven+Mysql+sprnig)
  5. Ignored attempt to cancel a touchmove event with cancelable=false
  6. 3025这个数具有一种独特的性质:将它平分为二段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025本身。请求出具有这样性质的全部四位数
  7. PHP安装__GongWei1997
  8. 为什么说个人免签支付非常安全呢?
  9. android aidl编译,Android AIDL详解
  10. 计算机系统与手机系统,中国什么时候才有国产电脑系统和手机系统?