Flutter 常用Widget-图片Image

标签: flutter学习系列  flutter

Flutter中,加载并显示图片使用的是Image组件。我们先来看下这个构造函数:

Image的构造参数有一下几种分别是:

  • Image:从Provider获取图像
  • Image.asset:加载资源图片
  • Image.file:加载本地图片文件
  • Image.network:记载网络图片
  • Image.memory:加载Uint8List资源图片

我们接下来看一下如何使用

class ImagePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Image.network('https://flutter.cn/assets/flutter-lockup-1caf6476beed76adec3c477586da54de6b552b2f42108ec5bc68dc63bae2df75.png'),
      ),
    );
  }
}

我们加载了一张网络图片。其他的使用也比较类似,这里不在赘述。我们看看provider如何使用。

class ImagePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Image(
          image: NetworkImage('https://flutter.cn/assets/flutter-lockup-1caf6476beed76adec3c477586da54de6b552b2f42108ec5bc68dc63bae2df75.png'),
        ),
      ),
    );
  }
}

可以看到效果是一样的。ImageProvider是一个抽象类,Flutter为我们提供了一套实现,当然我们也可以自己去实现provider。

这一部分就是Flutter为我们提供的ImageProvider。实际上,开篇介绍的Image的不同构造函数中,就是使用了不同的Provider来实现的。我们在来看看其他的参数。

属性 类型 说明
image ImageProvider ImageProvider是一个抽象类,Flutter为我们提供了一套实现,当然我们也可以自己去实现provider。
width/height double 显示区域的宽高设置,值得注意的是,不要和Image本身的大小混淆,Image Widget只是个容器,容器就有自己的大小,而显示的效果经常要和填充模式配合使用。
fit BoxFit 填充模式(下面有详细介绍)。
color Color 容器颜色
colorBlendMode BlendMode 图片混合模式,注意这个参数要混合Color使用才有作用。https://api.flutter.dev/flutter/dart-ui/BlendMode-class.html
alignment Alignment 控制图片的在容器中的位置。
repeat

ImageRepeat

设置容器比图片大时,图片的重复模式。
centerSlice Rect 如果图片被拉伸,那么是重哪个点开始拉伸。
gaplessPlayback bool 当provider改变的时候,重新加载的过程中,原图片是否保留。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

fit:填充模式

BoxFit.fill 不按比例拉伸显示到全部容器。

BoxFit.contain 在保证原图像比例的情况下,尽可能的拉伸充满容器。

BoxFit.cover 保证原图像的比例缩放并充满容器,超出部分剪裁。

我们使用一个200x200的图像,Image容器的大小我们也设置200x200,我们可以看到显示是正常的。

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Image(
          image: NetworkImage(_path),
          width: 200,
          height: 200,
          fit: BoxFit.cover,
        ),
      ),
    );
  }

我们现在改变宽度,为400.

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Image(
          image: NetworkImage(_path),
          width: 400,
          height: 200,
          fit: BoxFit.cover,
        ),
      ),
    );
  }

可以看到图片被放大了,超出的部分被剪切掉。

BoxFit.fitWidth 同比缩放,缩放宽度直到宽度充满容器。

我们把这几个参数改一下

width: 200,
height: 500,
fit: BoxFit.fitWidth,

width: 300,
height: 500,
fit: BoxFit.fitWidth,

width: 300,
height: 200,
fit: BoxFit.fitWidth,

应该显示原比例200x200大小

应该显示300x300大小

图片缩放300x300,但是会剪切掉一部分

BoxFit.fitHeight 同比缩放,缩放宽度直到高度充满容器(效果类似fitWidth)。

BoxFit.none 不进行任何缩放,显示原比例,容器容纳不下则剪切。

BoxFit.scaleDown 如果容器显示不下,则采用contain模式;如果容器可以容纳下则采用none。

=========================================================================

color/colorBlendMode 使用红色和图片进行混合

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Image(
          color: Colors.red,
          colorBlendMode: BlendMode.difference,
          image: NetworkImage(_path),
          width: 400,
          height: 200,
          fit: BoxFit.contain,
        ),
      ),
    );
  }

===============================================================

repeat 设置x重复

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Image(
          colorBlendMode: BlendMode.difference,
          image: NetworkImage(_path),
          width: 400,
          height: 200,
          fit: BoxFit.contain,
          repeat: ImageRepeat.repeatX,
        ),
      ),
    );
  }

总结:Flutter中可以使用Image Widget来显示图片,有多种图片的获取方式,也可以自己实现Provider来实现。接下来的文章会继续将常用Widget逐一介绍,在最后的系列中,会公开一个商业级的项目,感兴趣的小伙伴关注。如果您在阅读过程中发现错误,请及时留言给我,我会第一时间改正。也欢迎大家一切交流,共同进步,感谢支持!

版权声明:本文为z2008q原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/z2008q/article/details/108511748

智能推荐

Flutter组件学习(4)图片Image

  介绍 关于Flutter图片的加载有多种形式 方法 释义 Image() 从ImageProvider中获取图片,从本质上看,下面的几个方法都是他的具体实现。 Image.asset(String name) 从AssetBundler中获取图片 Image.network(String src) 显示网络图片 Image.file(File file) 从File中获取图片 Ima...

flutter 使用image_picker上传图片

第一步:封装,可以单独放在一个文件里 可以直接复制 第二步:打开底部弹框 调用showModalBottomSheet打开底部弹框,return第一步的HspPickerImagePanel(),val值就是返回的本地图片的地址,然后可以处理使用dio上传, 具体可以参考这篇文章https://blog.csdn.net/codekxx/article/details/101770516 注意 上...

flutter image-picker 上传图片

画part页面 底部面板里选择上传相册图片or拍照上传: 相册上传、拍照上传事件 查询今日是否打卡 调接口获取图片上传路径的方法 传参调接口打卡方法...

Flutter图片上传(Dio + Image_picker)

PS: 图片上传功能在项目中属于很常见的功能,网上也有蛮多图片上传的框架,看的眼花缭乱的。。。最后,本着自己最熟悉的才是最好的原则选择 Flutter Dio,所以项目中用的网络框架也是Flutter Dio ,直接拿来写个简单的demo,也算记录下Flutter踩坑心酸史吧。。。 国际惯例(为了省事没做图片大小限制了。。。) test.gif 废话不多说了,直接上代码, 先添加两个依赖: &nb...

Flutter系列之Widget

一、Flutter的核心原则 Flutter包括一个现代的响应式框架、一个2D渲染引擎、现成的widget和开发工具 一切皆为widget 那么,什么是widget呢? Widget是Flutter功能的抽象描述,是视图的配置信息,同样也是数据的映射,是Flutter开发框架中最基本的概念。与其他将视图(View)、控制器(Controller)、活动(Activity)、应用(Applicati...

猜你喜欢

冒泡排序,及改进方式,性能优化400%>>>附图解加源码

首先源码附上,源码中带有注释,看不懂没关系,源码后面附带图解,最后附上代码效率提升图 源码如下: 方案一:其实实现很简单,两层循环,每次内层迭代出最大的一个值,将其放入数组最后一个位置,外层循环的末端便往前移一位。其原理如下图 方案一代码块: 方案二:优化改进 仔细观察上面的图,我们不难发现当迭代到图下这样的情况时,其实已经全排序好了,但是我们还是需要对它进行1,2,3,4,5,6的迭代,这些情况...

css3常用选择器

先介绍一下基本选择器,如下几种 *:通配符。选择页面的所有元素 E:元素选择器。对页面的一些元素进行选择,如p,div,li等 .class:类选择器 #id:id选择器。一个Id在一个页面中只能选择,这是和类选择器的区别 E F:后代选择器。如ul li。选中ul下的li E>F:子元素选择器。如下,可以用 h1 > strong {color:red;}使h1的子元素strong变...

python is not set from command line or npm configuration

问题 猜测原因  python版本冲突 解决方案  去官网找到最新版本python 点击下载,注意记住你下载的目录,下载好以后,打开这个目录下的文件夹,Python310, 整个文件夹复制一下 在项目里运行npm config list --json 找到python的路径   我的是 C:\\Python27\\python.exe 说明项目里用的还是py...

Java8 Stream流操作

前言 我们常常需要将一个容器转化成另一个容器,或是对这个容器中的数据进行批量处理,这时使用Stream流可以大大减少我们的工作量。 1 Stream概述 Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。 那么什么是Stream? Stream将要处理的元素集合看作一种流,在流的过程中,借助St...

带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑

在Windows下进行C++的开发,不可避免的要与Windows的底层库进行交互,然而VS下的一项设置MT、MTd、MD和MDd却经常让人搞迷糊,相信不少人都被他坑过,特别是你工程使用了很多第三库的时候,及容易出现各种链接问题。看一下下面这个错误提示:  LIBCMT.lib(_file.obj) : error LNK2005: ___initstdio already defined...