Flutter 核心技术与实战
陈航
前美团点评高级技术专家
42432 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
Flutter 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

17 | 依赖管理(一):图片、配置和字体在Flutter中怎么用?

字体资源管理
像素密度管理
其他资源文件加载
图片类资源访问
资源存放位置
资源类型
思考题
总结
原生平台的资源设置
资源管理
Flutter主题设置
依赖管理

该思维导图由 AI 生成,仅供参考

你好,我是陈航。
在上一篇文章中,我与你介绍了 Flutter 的主题设置,也就是将视觉资源与视觉配置进行集中管理的机制。
Flutter 提供了遵循 Material Design 规范的 ThemeData,可以对样式进行定制化:既可以初始化 App 时实现全局整体视觉风格统一,也可以在使用单子 Widget 容器 Theme 实现局部主题的覆盖,还可以在自定义组件时取出主题对应的属性值,实现视觉风格的复用。
一个应用程序主要由两部分内容组成:代码和资源。代码关注逻辑功能,而如图片、字符串、字体、配置文件等资源则关注视觉功能。如果说上一次文章更多的是从逻辑层面分享应该如何管理资源的配置,那今天的分享则会从物理存储入手与你介绍 Flutter 整体的资源管理机制。
资源外部化,即把代码与资源分离,是现代 UI 框架的主流设计理念。因为这样不仅有利于单独维护资源,还可以对特定设备提供更准确的兼容性支持,使得我们的应用程序可以自动根据实际运行环境来组织视觉功能,适应不同的屏幕大小和密度等。
随着各类配置各异的终端设备越来越多,资源管理也越来越重要。那么今天,我们就先看看 Flutter 中的图片、配置和字体的管理机制吧。

资源管理

在移动开发中,常见的资源类型包括 JSON 文件、配置文件、图标、图片以及字体文件等。它们都会被打包到 App 安装包中,而 App 中的代码可以在运行时访问这些资源。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Flutter中的资源管理机制是一篇深入介绍如何在Flutter应用中管理图片、配置和字体资源的技术文章。文章首先强调了资源管理的重要性,并详细讲解了Flutter中资源的灵活存放位置和显式声明方式。不仅如此,文章还介绍了不同类型资源文件的加载方式,以及如何根据设备分辨率加载不同分辨率的图片资源。此外,文章还详细讲解了如何在Flutter中使用自定义字体,并给出了相应的代码示例。总的来说,这篇文章通过具体的代码示例和详细的讲解,帮助读者了解了Flutter中资源管理的基本原理和实际操作方法。另外,文章还提及了在原生平台中设置App启动图标和启动图的操作步骤,为读者提供了全面的资源管理知识。值得一提的是,文章还留下了两道思考题,引发读者思考和实验,增加了互动性和参与度。整体而言,这篇文章对于想要深入了解Flutter资源管理机制的开发者来说,是一篇极具价值的技术指南。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Flutter 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(30)

  • 最新
  • 精选
  • 3327
    1. 使用2.0x图片,优先使用和当前像素密度相近的资源 2.找2.0x图片,按分辨率由低到高找

    作者回复: 对

    2019-08-06
    11
  • Geek_45a2f1
    老师,我发现直接在drawable里面设置启动图,限制太大,于是就声明了一个widget,但是在APP启动的时候还是有白屏,请问有什么方法解决呢

    作者回复: Flutter需要借助于原生Android/iOS的运行环境,所以在引擎初始化之前的那部分工作(比如启动图、App图标、App名字),Flutter是搞不定的,必须要回到原生的工程中去实现

    2019-08-14
    3
    7
  • 亡命之徒
    对于像素密度3.0x的会找到2.0x的图片,对于2.0x的像素密度,1.0会自动压缩处理

    作者回复: 赞

    2019-08-06
    4
  • 拼命的小贝壳
    老师,启动icon为什么不在flutter本工程内增加一个配置,运行前编译到原生工程内?

    作者回复: 这个思路是可行的,我猜Flutter不这么做可能是想从设计层面保持Flutter工程和iOS/Android工程的独立性和简单性。毕竟Flutter只是一个应用层的框架,除了启动图、应用图标之外,像应用的配置、多语言环境、签名证书、设备配置这些东西是必须通过原生工程搞定的。通过脚本同步固然可行,但从框架层面考虑,Flutter不太可能只考虑一两个应用配置的迁移同步,必须要给出一个在Flutter内闭环的完整应用配置同步方案,后续随着原生开发环境的升级,维护和适配的工作量不会低的。

    2019-11-28
    2
  • Captain
    目录批量指定并不递归,只有在该目录下的文件才可以被包括,如果下面还有子目录的话,需要单独声明子目录下的文件。 这句话 能举例说明么?

    作者回复: 就是挨个单独声明子目录,或者单独声明子目录下的文件啊

    2019-11-19
  • 以为 Android 和 iOS 的都是生成的,可以加到 gitignore 中,看来不行啊。那哪些可以忽略呢?

    作者回复: 普通flutter工程的ios和android目录不能忽略,module工程可以

    2019-10-22
  • 🌝
    目录批量指定的话,需不需要把2.0x、3.0x的目录再指定一遍?

    作者回复: 你可以试试看

    2019-10-19
    2
  • jerry
    3.0像素密度的机器,使用1.0密度的图片,会放大吗

    作者回复: 看你这个坑位有多大了,如果不设坑位大小,会按照实际比例去填

    2019-10-17
  • zjhuang
    pubspec.yaml 可以直接将图片资源文件指定到 Android 的 mipmap-xhdpi 中吗?此时该目录下的资源 Flutter 会当成是 1.0x 的还是 2.0x 的

    作者回复: 不可以

    2019-10-16
  • 承香墨影
    老师,您好。有 2 个疑问,希望您能解答。 1. Flutter 中加载图片,会对图片的尺寸做优化吗?例如同一张 50x50 的图片,显示在两个不同尺寸的 Image 上,例如 20x20 和 40x40 的 Image,它们在内存中是一份还是两份数据? 然后在内存中占用的内存尺寸,是如何计算的?是按照原图的尺寸和它所存放的位置来计算的,还是依赖加载 Widget 的尺寸? 2. 如果是网络图片,又是如何处理的?会和 Android 的 Glide 之类的图片库一样,对其进行采样率的压缩吗?

    作者回复: 1.原始图片数据是一份(bitmap大小),渲染数据是两份(按加载widget尺寸算压缩后的bitmap大小)。 2.同1 你可以自己试验一下,用Dart DevTools中的Memory工具

    2019-10-01
收起评论
显示
设置
留言
30
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部