Flutter Image实现图片加载

Image 简介

  • Android ios 原生中使用 ImageView 来加载显示图片。
  • 在flutter 中通过Image来加载并显示图片。
  • 所有的widget并不是直接绘制图片的,而是控制的图片的主要属性的容器,负责绘制的是RenderObject,他们中间是通过ElementTree来联系起来。有了这个基础后,所有的widget都不会提供画布(canvas)来直接绘制image
  • RawImage 这是一个最基础图片容器Widget。
  • Image 这是一个通用包装类,它包装了RawImage。

前言 Image 基本使用

从ImageProvider来获取图片显示,这个类的使用基本和RawImage一致。

Widget image = Image(AssetImage("images/yuan.png"))

1 Image 加载网络图片

var imageUrl = "http://pic31.nipic.com/20130711/8952533_164845225000_2.jpg";

Image(
 image: NetworkImage(
 imageUrl),
 width: 100.0,
)

或者

Image.network(
 imageUrl,
 scale: 8.5,
),

或者

new FadeInImage.assetNetwork(
   //占位图
   placeholder: 'images/logo.png',
   image: imageUrl,
   width: 120,
   fit: BoxFit.fitWidth,
   ),

或者

 new CachedNetworkImage(
  width: double.infinity,
  height: double.infinity,
  fit: BoxFit.fill,
  imageUrl: imageUrl,
  placeholder: (context, url) => new ProgressView(),
  errorWidget: (context, url, error) => new Icon(Icons.error),
  ),

2 Image 加载本地图片

new Image.file(
 File('/storage/emulated/0/Download/test.jpg'),
 width: 120,
 fit: BoxFit.fill,
 //fill(全图显示且填充满,图片可能会拉伸),contain(全图显示但不充满,显示原比例),cover(显示可能拉伸,也可能裁剪,充满)
 //fitWidth(显示可能拉伸,可能裁剪,宽度充满),fitHeight显示可能拉伸,可能裁剪,高度充满),scaleDown(效果和contain差不多,但是)
),

3 Image 加载assets图片

3.1 在工程根目录下创建一个images目录,并将图片xxx.png拷贝到该目录。

3.2 在pubspec.yaml中的flutter部分添加如下内容:

 assets:
 - images/xxx.png

3.3 代码中使用

Image(
 image: AssetImage("images/xxx.png"),
 width: 100.0
);

Image.asset("images/xxx.png",
 width: 100.0,
)

4 加载圆角图片

new ClipOval(
   child: Image.network(
   imageUrl,
   width: 100,
   height: 100,
   fit: BoxFit.fitHeight,
   ),
  ),

或者

new CircleAvatar(
   backgroundImage: NetworkImage(imageUrl),
   radius: 50.0,
  ),

5 加载圆角矩形图片

new Container(
   width: 120,
   height: 60,
   decoration: BoxDecoration(
   shape: BoxShape.rectangle,
   borderRadius: BorderRadius.only(
   topLeft: Radius.circular(5),
   bottomLeft: Radius.circular(5),
   ),
   image: DecorationImage(
   image: NetworkImage(imageUrl),
//   image: AssetImage('images/icon_main_bg.png'),
   fit: BoxFit.cover),
   ),
  ),

或者

new ClipRRect(
   child: Image.network(
   imageUrl,
   scale: 8.5,
   fit: BoxFit.cover,
   ),
   borderRadius: BorderRadius.only(
   topLeft: Radius.circular(20),
   topRight: Radius.circular(20),
   bottomLeft: Radius.circular(20),
   bottomRight: Radius.circular(20),
   ),
  ),

3 Image 属性说明

const Image({
 ...
 this.width, //图片的宽
 this.height, //图片高度
 this.color, //图片的混合色值
 this.colorBlendMode, //混合模式
 this.fit,//缩放模式
 this.alignment = Alignment.center, //对齐方式
 this.repeat = ImageRepeat.noRepeat, //重复方式
 ...
})

3.1 width、height

width、height:用于设置图片的宽、高,当不指定宽高时,图片会根据当前父容器的限制,尽可能的显示其原始大小,如果只设置width、height的其中一个,那么另一个属性默认会按比例缩放,但可以通过下面介绍的fit属性来指定适应规则。

3.2 fit

fit:该属性用于在图片的显示空间和图片本身大小不同时指定图片的适应模式。适应模式是在BoxFit中定义,它是一个枚举类型,有如下值:

fill:会拉伸填充满显示空间,图片本身长宽比会发生变化,图片会变形。
cover:会按图片的长宽比放大后居中填满显示空间,图片不会变形,超出显示空间部分会被剪裁。
contain:这是图片的默认适应规则,图片会在保证图片本身长宽比不变的情况下缩放以适应当前显示空间,图片不会变形。
fitWidth:图片的宽度会缩放到显示空间的宽度,高度会按比例缩放,然后居中显示,图片不会变形,超出显示空间部分会被剪裁。
fitHeight:图片的高度会缩放到显示空间的高度,宽度会按比例缩放,然后居中显示,图片不会变形,超出显示空间部分会被剪裁。
none:图片没有适应策略,会在显示空间内显示图片,如果图片比显示空间大,则显示空间只会显示图片中间部分。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Flutter中网络图片加载和缓存的实现

    前言 应用开发中经常会碰到网络图片的加载,通常我们会对图片进行缓存,以便下次加载同一张图片时不用再重新下载,在包含有大量图片的应用中,会大幅提高图片展现速度.提升用户体验且为用户节省流量.Flutter本身提供的Image Widget已经实现了加载网络图片的功能,且具备内存缓存的机制,接下来一起看一下Image的网络图片加载的实现. 重温小部件Image 常用小部件Image中实现了几种构造函数,已经足够我们日常开发中各种场景下创建Image对象使用了. 有参构造函数: Image(Key k

  • Flutter Image实现图片加载

    Image 简介 Android ios 原生中使用 ImageView 来加载显示图片. 在flutter 中通过Image来加载并显示图片. 所有的widget并不是直接绘制图片的,而是控制的图片的主要属性的容器,负责绘制的是RenderObject,他们中间是通过ElementTree来联系起来.有了这个基础后,所有的widget都不会提供画布(canvas)来直接绘制image RawImage 这是一个最基础图片容器Widget. Image 这是一个通用包装类,它包装了RawImag

  • Flutter 使用cached_image_network优化图片加载体验

    在 App 中会经常遇到需要从后台拉取图片的场景,这一方面会给服务器带来网络带宽消耗,另一方面加载图片的等待过程也会影响用户体验.因此,往往会在 App 端对图片做缓存机制,以避免同一张图片反复发起请求.这个时候cached_image_network就派上用场了 上一篇Flutter 给列表增加下拉刷新和上滑加载更多功能,我们使用了列表,其中列表中有从网络下载图片.直接使用 Flutter 自带的 Image.network 下载图片一是无法缓存,二是体验不够好.熟悉 iOS 的肯定知道 SD

  • Flutter图片加载与缓存机制的深入探究

    目录 前言 图片控件 图片解析 缓存管理 ​新增缓存 缓存清理 图片加载 滑动中处理 总结 前言 今天来学习一下 Flutter 自身是如何加载图片和管理图片的. Flutter 提供了一个图片控件 Image,Image 定义了若干中加载图片的方式,包括 Image.asset.Image.file.Image.network.Image.memory. Image内部维护了一个 ImageProvider对象,ImageProvider则真正维护整个图片加载的工作.Widget 本身内部是体

  • flutter中的资源和图片加载示例详解

    目录 封面图 指定相应的资源 资源绑定 Asset bundling 资源变体 加载资源 加载文本资源 加载图片 加载依赖包中的图片 最后 封面图 下个季度的目标是把前端监控相关的内容梳理出来,梳理出来之后可能会在公司内部做个分享- Flutter应用程序既括代码也包括一些其他的资产,我们通常这些资产为资源. 有时候我会思考assets这个单词,在程序中到底应该翻译为资产呢?还是翻译为资源?按照习惯,我们这里还是称为资源好了- 这些资源是一些与应用程序捆绑在一起和并且部署应用时会用到的的文件,在

  • iOS程序开发之使用PlaceholderImageView实现优雅的图片加载效果

    说明 1. PlaceHolderImageView基于SDWebImage编写 2. 给定一个图片的urlString,以及一个placeholderImage就可以优雅的显示图片加载效果 效果 源码 PlaceholderImageView.h/.m // // PlaceholderImageView.h // SDWebImageViewPlaceHorder // // Created by YouXianMing on 16/9/14. // Copyright © 2016年 Yo

  • vue图片加载与显示默认图片实例代码

    本文实例为大家分享了vue图片加载与显示默认图片的具体代码,供大家参考,具体内容如下 HTML: <div class="content-show-img"> <div class="show-img"> <img class="default-image" :src="data.image" @load="successLoadImg" @error="errorL

  • 微信小程序 图片加载(本地,网路)实例详解

    在微信小程序中,要显示一张图片,有两种图片加载方式: 加载本地图片 加载网络图片 加载本地图片 <image class="widget__arrow" src="/image/arrowright.png" mode="aspectFill"> </image> src="/image/arrowright.png" 这句就是加载本地图片资源的.想想iOS中的加载本地图片,imageName:,类似.

  • Android Glide图片加载(加载监听、加载动画)

    本文实例为大家分享了Android Glide图片加载的具体代码,供大家参考,具体内容如下 1.普通用法 Glide.with(context) .load(url) .into(view); with中可以放context.activity.fragment..:当放activity.fragment时glide会根据生命周期来加载图片.推荐使用activity. 2.设置加载中和加载失败的图片 Glide.with(context) .load(url) .placeholder(R.dra

  • iOS 图片加载框架SDWebImage解读

    目的 在使用SDWebImage加载图片时,尤其是加载gif等大图时,SDWebImage会将图片缓存在内存中,这样是非常吃内存的,这时我们就需要在适当的时候去释放一下SDWebImage的内存缓存,才不至于造成APP闪退. SDWebImage提供了 UIImageView.UIButton .MKAnnotationView 的图片下载分类,只要一行代码就可以实现图片异步下载和缓存功能. 这样开发者就无须花太多精力在图片下载细节上,专心处理业务逻辑. SDWebImage 特点 提供 UII

  • JavaScript控制图片加载完成后调用回调函数的方法

    本文实例讲述了JavaScript控制图片加载完成后调用回调函数的方法.分享给大家供大家参考.具体分析如下: 这段代码可以控制指定区域内的图片加载完成后执行指定的回调函数. 复制代码 代码如下: function when_images_loaded($img_container, callback) { /* do callback when images in $img_container (jQuery object) are loaded. Only works when ALL ima

随机推荐