Flutter入门:Image组件

简介: 在flutter中显示图片的就是Image,相当于android中的ImageView,但是要比ImageView功能强大很多。比如支持gif动图,可以加载网络图片,缓存机制,图片处理等。实际上Image基本上实现了平时我们用到的图片加载框架(如glide)的大部分功能。

前言


在flutter中显示图片的就是Image,相当于android中的ImageView,但是要比ImageView功能强大很多。

比如支持gif动图,可以加载网络图片,缓存机制,图片处理等。实际上Image基本上实现了平时我们用到的图片加载框架(如glide)的大部分功能。


Image


根据加载图片的不同,可以使用不同的Image函数

  • Image.asset  加载项目内资源
  • Image.file      加载内存卡图片
  • Image.memory   加载byte[]数据
  • Image.network   加载网络图片

使用起来也很简单,如:


Image.file(File("xxx/xxxx/xxx.jpg"))
复制代码


当然这只是最简单的使用,函数中还有很多属性可以设置,以达到不同的效果

比如图片填充方式


Image.file(File("xxx/xxxx/xxx.jpg"), fit: BoxFit.cover)
复制代码


设置fit这个属性就可以了,cover表示图片宽高比不变,切割图片。

其他属性就不一一介绍了。


resize和缓存


当加载超大图片的时候,我们为了节省内存空间,需要将图片压缩成小尺寸再进行加载,即resize。

在Image中,resize是通过cacheWidth和cacheHeight这两个属性来处理的,同时也进行了缓存。

如:


Image.file(
  File("xxx/xxxx/xxx.jpg"),
  fit: BoxFit.cover,
  filterQuality: FilterQuality.low,
  cacheWidth: window.physicalSize.width ~/ 3,
)
复制代码


这里将cacheWidth设为屏幕宽度的1/3。

加载图片的时候会先处理图片,将读到内存中的图片数据的压缩到宽度等于屏幕宽度的1/3,然后将新的小的图片数据缓存起来,再加载显示。

后面我们如果还用到了这个图片,且cacheWidth设置一样,就可以直接从缓存中取出数据加载显示。

当然如果cacheWidth设置不一样,就要重新再处理一次图片。

cacheWidth和cacheHeight这两个属性可以同时设置,也可以只设置一个,如果不想改变图片的宽高比,就设置一个就可以了。


Hero闪烁问题


但是这里注意,当使用Hero将Image当作共享元素时,如果设置了cacheWidth会出现闪烁的情况(注:Hero是flutter中处理共享元素的组件)。


拖动消失问题


如果页面有拖动效果,这时发现当进行拖动时,设置了cacheWidth或cacheHeight的Image中的图片会消失,拖动结束后图片又出现。

解决方法,在image中添加gaplessPlayback: true即可。


FadeInImage占位图


我们加载图片,尤其是网络图片的时候,需要先设置一个占位图。但是上面提到的几个函数都不存在相关的属性,怎么办呢?

我们可以使用FadeInImage,如下:


FadeInImage(
    placeholder: AssetImage("images/default.png"),
    image: FileImage(File("xxx/xxxx/xxx.jpg")),
    fadeOutDuration: Duration(milliseconds: 1),
    fadeInDuration: Duration(milliseconds: 1),
  )
复制代码


这里placeholder就是占位图,而image就是真正加载的图片

注意这两个类型是ImageProvider,所以要使用FileImage、AssetImage等

FadeInImage在加载完成后替换占位图会执行一个渐出渐近的动画,所以也有相关的设置

比如fadeOutDuration和fadeInDuration设置动画的时长,fadeOutCurve和fadeInCurve可以设置动画曲线。

占位图解决,但是我们还想使用压缩和缓存怎么办?

可以使用ResizeImage解决,如下:


FadeInImage(
    placeholder: AssetImage("images/default.png"),
    image: ResizeImage(FileImage(File("xxx/xxxx/xxx.jpg")), width: window.physicalSize.width ~/ 3),
    fadeOutDuration: Duration(milliseconds: 1),
    fadeInDuration: Duration(milliseconds: 1),
  )
复制代码


用ResizeImage将FileImage、AssetImage等包装一层就可以了。



目录
相关文章
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1046 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
547 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
543 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
索引
【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
在 Flutter 开发中,AzListView 是实现字母索引分类列表的理想选择。它支持 A-Z 快速跳转、悬浮分组标题、自定义 UI 和高效性能,适用于通讯录、城市选择等场景。本文将详细解析 AzListView 的核心参数和实战示例,助你轻松实现流畅的索引列表。
721 7
Flutter 自定义组件继承与调用的高级使用方式
本文深入探讨了 Flutter 中自定义组件的高级使用方式,包括创建基本自定义组件、继承现有组件、使用 Mixins 和组合模式等。通过这些方法,您可以构建灵活、可重用且易于维护的 UI 组件,从而提升开发效率和代码质量。
519 1
|
开发工具 UED
Flutter&鸿蒙next中封装一个输入框组件
本文介绍了如何创建一个简单的Flutter播客应用。首先,通过`flutter create`命令创建项目;接着,在`lib`目录下封装一个自定义输入框组件`CustomInput`;然后,在主应用文件`main.dart`中使用该输入框组件,实现简单的UI布局和功能;最后,通过`flutter run`启动应用。本文还提供了后续扩展建议,如状态管理、网络请求和UI优化。
314 1
|
Dart UED
Flutter用户交互组件
Flutter用户交互组件
262 2
|
存储 开发框架 开发者
flutter:代码存储&基本组件 (五)
本文档介绍了Flutter中的一些基本组件和代码示例,包括代码存储、基本组件如AppBar的简单使用、可滑动切换的标签栏、TextField的多种用法(如简单使用、登录页面、文本控制器的监听与使用、修饰等),以及如何实现点击空白区域隐藏键盘等功能。通过这些示例,开发者可以快速掌握在Flutter应用中实现常见UI元素的方法。
184 2
|
开发工具
Flutter&鸿蒙next中封装一个列表组件
Flutter&鸿蒙next中封装一个列表组件
291 0
|
开发者
flutter:功能性组件 (八)
本文介绍了Flutter中常用的UI组件和功能,包括进度指示器(线性和圆形)、下拉刷新、选项按钮(单选按钮、复选框、开关)、手势识别(GestureDetector、Ink和InkWell)以及提示和Offstage组件的使用方法和示例代码。这些组件和功能可以帮助开发者快速构建交互丰富的应用程序界面。
315 0

热门文章

最新文章