写在前面:一名有三年Android开发经验的女程序员(欢迎大家关注我 ~期待和大家一起交流和学习Android的相关知识)
官方Icon
Flutter本身自带了MaterialDesign的图标集,在pubspec.yaml中有如下配置
...
flutter:
users-material-design: true
...
通过以上配置,就可以在代码中引用任何MD的官方图标(需翻墙)。这些图片都定义在了IconDatas中。
Icon(Icons.favorite)
第三方Icon
第三方图标库和MD的图片库在使用上没有区别,但需要手动引入和配置路径。为了方便复用,我们可以把图标制作为一个第三方库来调用。例如:
...
import 'package:my_icon/my_icon.dart';
...
Icon icon = Icon(MyIcon.zhihu); # 知乎LOGO
制作Icon库
1.制作ttf文件
一般我们会在iconfont.cn上去寻找合适的图标集或自行绘制,完成后打包下载,压缩包里有制作好的ttf文件。
2.编写配置文件
作为示例,在/lib目录下创建一个名为my_font的文件夹,文件夹中的pubspec.yaml内容如下:
name: my_font
description: The font for my application
author: Lynx <lynx86@126.com>
homepage: http://www.a-lightyear.com/
version: 1.0.0
environment:
sdk: ">=2.0.0-dev.28.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
dev_dependencies:
recase: "^2.0.0+1"
flutter:
fonts:
- family: MyIcon
fonts:
- asset: lib/fonts/iconfont.ttf
weight: 400
从配置文件看出,iconfont下载的ttf文件放在/lib/my_font/lib/fonts/下面,该路径可以自行设置。
3.编写库文件
library font_social_flutter;
import 'package:flutter/widgets.dart';
class MyIcon {
static const IconData zhihu = const _MyIconData(0xe6a2);
static const IconData wechat = const _MyIconData(0xe697);
static const IconData alipay = const _MyIconData(0xe698);
static const IconData weibo = const _MyIconData(0xe6ab);
static const IconData wechat_friends = const _MyIconData(0xe6ae);
static const IconData qq = const _MyIconData(0xe6ac);
}
class _MyIconData extends IconData {
const _MyIconData(int codePoint)
: super(
codePoint,
fontFamily: 'MyIcon',
fontPackage: 'my_icon',
);
}
这里的0xe6a2即为每个Icon的unicode字符。在iconfont下载包里有一个html文件,打开后可以看到每个图片的unicode值。
使用Icon
引入Icon库
在使用之前,需要把该库引入到当前flutter工程中。编辑flutter项目的pubspec.yaml,添加如下内容:
...
dependencies:
flutter:
sdk: flutter
...
my_icon:
path: lib/my_icon/ # 在这里引入第三方icon库
...
...
使用Icon
如开篇所述,在做好以上准备工作后,即可以如MD图标一般方便的引入自制的图标集。
...
import 'package:my_icon/my_icon.dart';
...
Icon icon = Icon(MyIcon.zhihu); # 知乎LOGO
网友评论