图标组件是展示图标的组件,但是再Flutter中,Icon组件是只是起一个展示效果,不能进行交互,如果要实现交互,就需要使用图标按钮IconButton组件。
图标组件有如下几个组件:
- IconButton:可以交互的Icon
- Icons:Flutter自带的Icon集合
- IconTheme:Icon主题
- ImageIcon:通过AssetImage或其他图片显示Icon
Flutter的Icon组件和图片的对比:
- 1、体积小,减少安装包的大小;
- 2、矢量的:icon都是矢量图标,缩放不会影响其清晰度;
- 3、可以应用文本样式:可以像文本一样改变字体图标的颜色、大小对齐等;
- 4、可以通过TextSpan和文本混用;
Icon的常用属性:
- color:Color类型,设置图标的颜色
- size:Double类型,设置图标的尺寸
1、Icon的基本使用
return Icon(Icons.add);
2、Icon设置颜色和尺寸
return Icon(
Icons.add,
color: Colors.blue,
size: 100.0,
);
3、使用Text显示Icon
String icons = "";
icons += "\ue145";//这里根据图标Icons.add去查找对应的16进制,必须替换0x为\u
icons += " \ue0cd";
icons += " \uE90D";
return Text(
icons,
style: TextStyle(
fontFamily: "MaterialIcons",//必须要添加该属性才能显示
fontSize: 50.0,
color: Colors.blue,
),
);
4、自定义图标
在实际工作中,系统自带的图标完全不能满足我们的需求,所以我们可以在www.iconfont.cn上去下载自己需要的库,在Flutter中只需要ttf的格式。
4.1、首先去iconfont.cn上去打包下载自己需要的图标
4.2、在项目的根目录下新建一个icons目录,将上一步下载里的ttf格式的文件拷贝进去
4.3、修改pubspec.yaml文件,添加或修改如下内容:
fonts:
- family: hiIcon
fonts:
- asset: fonts/iconfont.ttf
4.4、定义一个Icon类型,内容如下:
import 'package:flutter/material.dart';
class HiIcons {
static const IconData shuaxin = const IconData(
0xe63a,//这个需要在第一步下载的包中去找到iconfont.css文件,里面有对应图标的编码
fontFamily: 'hiIcon',//这个必须跟pubspec.yaml里的名字保持一致
matchTextDirection: true,
);
static const IconData macdizhiguizheng = const IconData(
0xe6f3,
fontFamily: 'hiIcon',
matchTextDirection: true,
);
}
4.5、导入第四步的类,然后进行使用即可
import '../HiCoins.dart';
return Column(
children: <Widget>[
Icon(
HiIcons.shuaxin,
color: Colors.blue,
size: 50.0,
),
Icon(
HiIcons.macdizhiguizheng,
color: Colors.blue,
size: 50.0,
),
],
);
重新编译下,即可看到下面的效果图
5、图标按钮组件(IconButton)
在前面我们已经说过,如果想要Icon具有交互操作,那么就需要使用IconButton组件,图标按钮组件是基于Material Design风格的组件,所以在按下的时候会有水波纹效果。如果设置onPressed回调函数为null,这个按钮就处于禁用状态。
return Center(
child: IconButton(
icon: Icon(
Icons.volume_up,
color: Colors.green[600],
size: 40.0,
),
tooltip: '按下显示',
onPressed: () {
print("按下打印");
},
),
);