前言

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. 手动 jq 触发 动态的 layui select change 事件

    var s= $('#province').val(); //先获取   默认选中的第一个 option 的值 ( value)    var select = 'dd[lay-value=' + s ...

  2. I am zhoukangyang!

    我是 \(\texttt{zhoukangyang}\),一名来自浙江省,杭州市的初二菜鸡 \(\texttt{oier}\) . 洛谷zhoukangyang 很多东西因为太垃圾所以 了,要开 请洛 ...

  3. CSP-S 初赛最后的复习

    2020CSP-S 模拟赛1 3.一个圆形水池中等概率随机分布着四只鸭子,那么存在一条直径,使得鸭子全在直径一侧的概率是(). A.\(\frac 1{16}\) B.\(\frac 1{8}\) C ...

  4. 题解-CF1139D Steps to One

    题面 CF1139D Steps to One 一个数列,每次随机选一个 \([1,m]\) 之间的数加在数列末尾,数列中所有数的 \(\gcd=1\) 时停止,求期望长度 \(\bmod 10^9+ ...

  5. git clone GitLab 工程报错Repository not found

    有时使用git拉取gitlab上的项目时会出现如下的错误信息:Repository not found remote: Repository not found.fatal: repository ' ...

  6. Object not found! The requested URL was not found on this server.... 报错解决方案

    服务器(centos6.5) lnmp 报错如下 Object not found! The requested URL was not found on this server. The link ...

  7. ⑥SpringCloud 实战:引入gateway组件,开启网关路由功能

    这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  8. 从函数到包的Python代码层次

    代码层次 Python是一门脚本语言,新建一个.py文件,写点代码,就可以跑起来了,无论放哪都可以.比如where.py文件: print("Where am I?") 那么问题来 ...

  9. SharePoint Online之通过JSOM发送邮件

    我们在SharePoint 开发过程中,经常会用到发邮件的功能,例如向Manager提醒有需要待办任务等等场景. 图片来自网站,如侵权,速删 一般我们会采用Workflow或者Power Automa ...

  10. [日常摸鱼]UVA11424&11426 GCD - Extreme

    话说UVa的机子跑的好快呀- (两题题意一样,前一题数据范围比较小) 题意:求$\sum_{i=1}^{n-1} \sum_{j=i+1}^n gcd(i,j),n<4\times 10^6$ ...