背景
在开发 flutter 项目时,经常会用到一些图标,这些图标通常是从一些图标库中下载下来的,然后需要把图标svg
格式转换成flutter
项目中的icon font
,这个过程是比较繁琐的,而且如果图标库中的图标有更新,那么还需要手动去下载新的图标,然后再转换,在有了fluttericon.com
这个网站之后,这个过程就变得非常简单了。
fluttericon.com 是什么
fluttericon.com
是一个在线的图标管理网站,它提供了大量的免费图标库,可以直接在线检索图标:
在挑选好所需的图标之后,点击DOWNLOAD
按钮,就可以下载一个zip
文件,里面包含了字体文件和flutter
项目中的icons.dart
文件:
使用
下载下来的zip
文件解压之后,里面包含了两个文件夹,一个是fonts
文件夹,里面包含了字体文件,my_flutter_app_icons.dart
文件,将这两个文件夹拷贝到flutter
项目中,然后在pubspec.yaml
文件中引入字体文件:
1 | fonts: |
这里的
my_flutter_app
是根据 fluttericon.com 网站中自定义的项目名称来的,这里是默认的名称,可以随意修改。
然后在项目中使用这个图标:
1 | import 'package:flutter/material.dart'; |
备份
由于fluttericon.com
是使用浏览器cookie
来保存用户的图标库,如果清除了cookie
,那么之前的图标库就会丢失,所以在使用fluttericon.com
的时候,最好将下载的图标库(.zip)备份一下,这样以后就可以直接导入自己的图标库,而不用重新挑选一遍。
导入自定义 SVG
除了自带的图标库之外,fluttericon.com
还支持导入自定义的svg
文件,但是需要注意的是,导入的必须是compound path svg
,而且也不支持类似fill
这样的属性,所以在导入之前需要先处理一下svg
文件。
碰到的问题
我这里就碰到了一个场景,想在一个SVG
文件加上文本,然后导入到fluttericon.com
中,但是如果没有做处理的话会报错:
1 | If image looks not as expected please convert to compound path manually. |
因为如果直接编辑的SVG
添加文本导出来的实际上是变成了多个path
,比如这个:
我在原始的SVG
中间添加了一个字,但是导出来的SVG
变成了这样:
1 |
|
通过 Adobe Illustrator 处理
我本人对SVG
不是很熟悉,网上找了很多资料也没有找到相关的解决方案,最后靠着 AI 和无尽的尝试,总算是盲人摸象的处理出来了,这里记录一下:
- 首先打开
SVG
文件,然后把文本添加好,这一步很简单。 - 选中文本,然后
属性
->创建轮廓
: - 还是选中文本,然后
路径查找器
->轮廓
: - 最后全选所有节点,然后
对象
->复合路径
->建立
:
这个时候再导出SVG
文件,可以看到就只保留一条path
了:
1 |
|
接下来就可以成功导入到fluttericon.com
中了。
总结
折腾了这么久,终于搞定了 fluttericon.com 的图标导入问题!说实话,一开始处理 SVG 文件时还真是让人头大,特别是遇到那些路径格式不兼容的情况。不过通过这次实践,我总结出了一套还算顺手的处理流程,希望能帮其他开发者少走点弯路。
关键点就是:
- SVG 文件预处理很重要,特别是路径格式的转换
- 导入前最好先检查下 SVG 的结构是否规范
- 如果导入失败,99% 都是 SVG 格式的问题
总之,熟悉了这套流程后,处理自定义图标就变得轻松多了。搞定!🚀