前言

Flutter中,可以通过Image组件来加载并显示图片,Image的数据源可以是asset、文件、内存以及网络。

ImageProvider 是一个抽象类,主要定义了图片数据获取的接口load(),从不同的数据源获取图片需要实现不同的ImageProvider ,如AssetImage是实现了从Asset中加载图片的ImageProvider,而NetworkImage实现了从网络加载图片的ImageProvider。

Image widget有一个必选的image参数,它对应一个ImageProvider。

实例

// 图片、Icon

import 'package:flutter/material.dart';

class ImageRoute extends StatelessWidget {

  @ override
Widget build(BuildContext context) {
var assetImg = AssetImage('assets/images/辣椒.png');
var networkImg = NetworkImage('https://avatars2.githubusercontent.com/u/20411648?s=460&v=4'); return SingleChildScrollView(
child: Column(
children: <Image>[ // 从assets中加载图片
Image(
image: assetImg,
width: 100.0,
), // 从网络加载图片
Image(
image: networkImg,
width: 100.0,
), Image(
image: networkImg,
// width、height:用于设置图片的宽、高,当不指定宽高时,图片会根据当前父容器的限制,尽可能的显示其原始大小,
// 如果只设置width、height的其中一个,那么另一个属性默认会按比例缩放,但可以通过fit属性来指定适应规则。
width: 100.0,
height: 200.0,
// 图片的混合色值
color: Colors.blue,
// 图片的混合模式
colorBlendMode: BlendMode.difference,
// 对齐方式
alignment: Alignment.center,
// 重复方式,当图片本身大小小于显示空间时,指定图片的重复规则
repeat: ImageRepeat.repeatY,
), // 下面来讨论fit属性
Image(
image: networkImg,
height: 50.0,
width: 100.0,
// 会拉伸填充满显示空间,图片本身长宽比会发生变化,图片会变形。
fit: BoxFit.fill,
),
Image(
image: networkImg,
height: 50,
width: 50.0,
// 默认适应规则,图片会在保证图片本身长宽比不变的情况下缩放以适应当前显示空间,图片不会变形。
fit: BoxFit.contain,
),
Image(
image: networkImg,
width: 100.0,
height: 50.0,
// 会按图片的长宽比放大后居中填满显示空间,图片不会变形,超出显示空间部分会被剪裁。
fit: BoxFit.cover,
),
Image(
image: networkImg,
width: 100.0,
height: 50.0,
// 图片的宽度会缩放到显示空间的宽度,高度会按比例缩放,然后居中显示,图片不会变形,超出显示空间部分会被剪裁。
fit: BoxFit.fitWidth,
),
Image(
image: networkImg,
width: 100.0,
height: 50.0,
// 图片的高度会缩放到显示空间的高度,宽度会按比例缩放,然后居中显示,图片不会变形,超出显示空间部分会被剪裁。
fit: BoxFit.fitHeight,
),
Image(
image: networkImg,
width: 100.0,
height: 50.0,
// 图片按比例适应。
fit: BoxFit.scaleDown,
),
Image(
image: networkImg,
height: 50.0,
width: 100.0,
// 图片没有适应策略,会在显示空间内显示图片,如果图片比显示空间大,则显示空间只会显示图片中间部分。
fit: BoxFit.none,
), ].map((e){
return Row(
children: <Widget>[
Padding(
padding: EdgeInsets.all(10.0),
child: SizedBox(
width: 100,
child: e,
),
),
Text(e.fit.toString())
],
);
}).toList(),
),
);
} } class MyIcons{
// 微信图标
static IconData weChat = const IconData(0xe620, fontFamily: 'MyIcon', matchTextDirection: true); // 新春图标
static IconData newYear = const IconData(0xe64a, fontFamily: 'MyIcon', matchTextDirection: true);
} class IconRoute extends StatelessWidget { @override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
// 使用Material Design字体图标
Icon(Icons.accessible, color: Colors.green,),
Icon(Icons.error, color: Colors.green,),
Icon(Icons.fingerprint, color: Colors.green,),
// 使用自定义字体图标
Icon(MyIcons.weChat, color: Colors.green,),
Icon(MyIcons.newYear, color: Colors.green,), ],
);
} }

注意点

  1. 使用自定义字体图标时,下载资源是要注意,在iconfont.cn选取图标后,加到项目中,点击“下载到本地”,注意:这里下载只能浏览器,不能用迅雷等插件。
  2. 下载成功后,将iconfont.ttf文件放在项目文件下,进行pubspec.yaml的配置。使用时,打开下载文件中的html页面或者在个人中心中得到图标的Unicode,但是这个Unicode不能直接用,例如得到“微信”的Unicode为“&#xe620”,使用时改为“0xe620”,这时,可能IDE显示的图标对应不上,但是热重载后图标会显示成功。

Flutter 基础组件:图片和Icon的更多相关文章

  1. Flutter 基础组件:按钮

    前言 Material组件库中提供了多种按钮组件如RaisedButton.FlatButton.OutlineButton等,它们都是直接或间接对RawMaterialButton组件的包装定制,所 ...

  2. flutter 基础组件

    TextWidget class TextWidget extends StatelessWidget { final TextStyle _textStyle = TextStyle( fontSi ...

  3. Flutter 基础组件:进度指示器

    前言 Material 组件库中提供了两种进度指示器:LinearProgressIndicator和CircularProgressIndicator,它们都可以同时用于精确的进度指示和模糊的进度指 ...

  4. Flutter 基础组件:输入框和表单

    前言 Material组件库中提供了输入框组件TextField和表单组件Form. 输入框TextField 接口描述 const TextField({ Key key, // 编辑框的控制器,通 ...

  5. Flutter 基础组件:单选框和复选框

    前言 Material组件库中提供了Material风格的单选开关Switch和复选框Checkbox,虽然它们都是继承自StatefulWidget,但它们本身不会保存当前选中状态,选中状态都是由父 ...

  6. Flutter 基础组件:文本、字体样式

    // 文本.字体样式 import 'package:flutter/material.dart'; class TextFontStyle extends StatelessWidget { // ...

  7. Flutter 基础组件:状态管理

    前言 一个永恒的主题,"状态(State)管理",无论是在React/Vue(两者都是支持响应式编程的Web开发框架)还是Flutter中,他们讨论的问题和解决的思想都是一致的. ...

  8. Flutter 基础组件:Widget简介

    概念 在Flutter中几乎所有的对象都是一个Widget.与原生开发中"控件"不同的是,Flutter中的Widget的概念更广泛,它不仅可以表示UI元素,也可以表示一些功能性的 ...

  9. 【Flutter实战】图片组件及四大案例

    老孟导读:大家好,这是[Flutter实战]系列文章的第三篇,这一篇讲解图片组件,Image有很多高级用法,希望对您有所帮助. 图片组件是Flutter基础组件之一,和文本组件一样必不可少.图片组件包 ...

随机推荐

  1. 5.深入Istio源码:Pilot-agent作用及其源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 本文使用的Istio源码是 release 1.5. 介绍 Sidecar在注入的时候会 ...

  2. C++异常之五 异常和继承

    异常和继承 异常也是类,我们可以创建自己的异常类,在异常中可以使用(虚函数,派生,引用传递和数据成员等), 下面用一个自制的数组容器Vector,在对Vector初始化时来对Vector的元素个数进行 ...

  3. IIS应用程序池配置详解及优化

    参数说明 1.常规 属性名称 属性详解 NET CLR 版本 配置应用程序池,以加载特定版本的 .NET CLR.选定的 CLR版本应与应用程序所使用的相应版本的 .NET Framework 对应. ...

  4. [日常摸鱼]UVA393 The Doors 简单计算几何+最短路

    The  Boy Next   Doors 题意:给定一个固定大小的房间($x,y$的范围都是$[0,10]$),有$n$个墙壁作为障碍(都与横坐标轴垂直),每个墙壁都有两扇门分别用四个点来描述,起点 ...

  5. aaencode:用颜文字来加密吧

    今天逛大佬博客发现了一个有意思的东西 ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚ ...

  6. 持久层之 MyBatis: 第三篇 :缓存 And 高级查询

    MyBatis入门到精通3 缓存机制 Mybatis一级缓存测试 Mybatis二级缓存测试 高级查询 表关系说明 一对一查询 一对多查询 多对多查询 缓存机制 正如大多数持久层框架一样,MyBati ...

  7. Attention & Transformer

    Attention & Transformer seq2seq; attention; self-attention; transformer; 1 注意力机制在NLP上的发展 Seq2Seq ...

  8. 微博爬虫,python微博用户主页小姐姐图片内容采集爬虫

    python爬虫,微博爬虫,需要知晓微博用户id号,能够通过抓取微博用户主页内容来获取用户发表的内容,时间,点赞数,转发数等数据,当然以上都是本渣渣结合网上代码抄抄改改获取的! 要抓取的微博地址:ht ...

  9. 同一个UITextField 根据不同状态下弹出不同类型键盘遇到的坑

    一,需求:有多个选项按钮,点击不同的按钮,textfield内容需求不同弹出对应需求的键盘类型. 二,问题:1.刚开始在按钮状态改变后设置 self.textField.keyboardType属性完 ...

  10. 如何优雅排查现网服务器cpu飙高的问题

    1.排查现网服务器cpu飙高问题的思路 1.查看java进程id ps -ef|grep java 2.使用top -Hp 进程id 查看cpu比较高的线程 3.执行jstack 进程id > ...