前言

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. 【Codeforces 715C】Digit Tree(点分治)

    Description 程序员 ZS 有一棵树,它可以表示为 \(n\) 个顶点的无向连通图,顶点编号从 \(0\) 到 \(n-1\),它们之间有 \(n-1\) 条边.每条边上都有一个非零的数字. ...

  2. linux 上安装部署python

    一般在linux中使用python 需要安装pyenv 进行版本控制 因为linux6.9自带的Python是2.6的 同时很多命令都是基于2.6开发的 所以系统环境不能改 我们要开发 只能用pyen ...

  3. 抖音视频背景音乐提取工具v1.0

    使用方法:id就是你点那个音乐分享,复制链接,然后链接有个ID(userid=后面数字就是id),就是那个,输入ID之后得到链接,浏览器新建下载,复制你得到的链接就行了(结果空白多解析几次就行了)

  4. sqli-labs less-7(文件读写)

    less-7 dump into outfile(文件读写) 通俗的来讲,就是通过outfile传入一句话木马到网站目录里,然后用菜刀或者蚁剑等连接 过程: 输入id=?判断闭合类型 页面上提示了使用 ...

  5. 二、TestNG的Hello World

    创建第一个TestNG的例子 1.创建一个TestNG的类 选择项目路径"右键"--NEW--Other 选择TestNG cLass(如果没有这个选项是testng没有配置成功) ...

  6. Spring Boot 最简单的解决跨域问题

    跨域问题(CORS) CORS全称Cross-Origin Resource Sharing,意为跨域资源共享.当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求.如果此时另一 ...

  7. 精尽Spring MVC源码分析 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  8. 个人微信公众号搭建Python实现 -个人公众号搭建-处理消息和事件(14.3.4)

    @ 目录 1.消息处理 2.事件处理 3.返回处理 关于作者 1.消息处理 现在只处理text文本消息 没有关键字的就交给qingyunke机器人去应付,这是一个免费的对话api 从配置文件中读取关键 ...

  9. Numpy的学习2-基础运算1

    import numpy as np a=np.array([10,20,30,40]) # array([10, 20, 30, 40]) b=np.arange(4) # array([0, 1, ...

  10. 简单了解一下 Nginx

    一.Nginx 基本认识 1.Nginx 是什么? Nginx 是一款开源的.轻量级的.高性能的 HTTP 服务器 以及 反向代理服务器. 特点是 占有内存少.并发能力强. 2.Nginx 用来干什么 ...