Flutter中使用系统icon方法

  1. 前言
    Flutter作为时下最流行的技术之一,凭借其出色的性能以及抹平多端的差异优势,早已引起大批技术爱好者的关注,甚至一些闲
    鱼,美团,腾讯等大公司均已投入生产使用。虽然目前其生态还没有完全成熟,但身靠背后的Google加持,其发展速度已经足够惊
    人,可以预见将来对Flutter开发人员的需求也会随之增长。
    无论是为了现在的技术尝鲜还是将来的潮流趋势,都9102年了,作为一个前端开发者,似乎没有理由不去尝试它。正是带着这样的
    心理,笔者也开始学习Flutter,同时建了一个用于练习的仓库,后续所有代码都会托管在上面,欢迎star,一起学习。这是我写的
    Flutter系列文章:
    用Flutter构建漂亮的UI界面 – 基础组件篇
    Flutter滚动型容器组件 – ListView篇
    Flutter网格型布局 – GridView篇
    在Flutter中使用自定义Icon
    今天要分享的内容其实非常简单,我们都知道Flutter内置了一套Material Design风格的Icon图标,但对于一个成熟的App而言,通
    常情况下还是远远不够的。为此,我们需要在项目中引入自定义的Icon图标。
    本文就将以Ant Design图标库为例,介绍如何在Flutter中引入自定义图标。
  2. 准备工作:字体文件
    正所谓“巧妇难为无米之炊”,要想引入自定义图标,首先我们得准备好图标字体文件(.ttf后缀)。对于大公司而言,找视觉同学切
    就可以了。但如果是自己做的业余项目或者没有资源的时候,我们可以上阿里巴巴矢量图标库pick自己心仪的图标。
    这里就以Ant Design官方图标库为例(一共有600个图标),通过以下操作,我们将图标字体文件加入到项目中:
    添加购物车 –> 点击购物车 –> 下载代码 –> 解压 –> 拷贝至项目(可重命名)
  1. 声明自定义字体
    仅仅将字体文件复制到项目中还不够,我们需要通过声明的方式来告诉Flutter有新字体可用。打开项目根目录下的pubspec.yaml文
    件,找到fonts这一段:
    To add custom fonts to your application, add a fonts section here, in this “flutter” section. Each entry in this list should have a
    “family” key with the font family name, and a “fonts” key with a list giving the asset and other descriptors for the font.
    注释就是让我们在该段文字下方添加自定义字体的声明,结合其注释掉的例子和当前的项目目录,我们可以这样配置:
    /
    项目工程目录结构
    .
    ├── README.md
    ├── android
    │ └── app
    ├── assets
    │ └── fonts
    │ └── AntdIcons.ttf
    ├── flutter_training_app.iml
    ├── ios
    │ └── Flutter
    ├── lib
    │ └── main.dart
    ├── pubspec.lock
    └── pubspec.yaml
    字体声明
    fonts:
  • family: AntdIcons
    fonts:
  • asset: assets/fonts/AntdIcons.ttf
    注意: 配置完之后,一定要执行flutter packages get命令以及重新编译项目,否则字体文件无法使用。
  1. 编写自定义的IconData
    其实到目前为止,我们已经可以使用刚刚下载的图标了,就像下面代码这样:
    Icon(
    IconData(0xe77d, fontFamily: ‘AntdIcons’),
    size: 20,
    color: Colors.black
    )
    其中fontFamily的值’AntdIcons’就是我们刚才声明的新字体,但是代码中的0xe77d数值是哪来的呢?再次打开之前下载解压之后的文
    件夹,其中有一个demo_index.html文件,在浏览器中打开它我们可以看到下面的画面:

在Unicode这个Tab下,我们可以看到它贴心地给出了所有图标的Type和Unicode码对照关系。所以理论上来说,我们想用哪个图标,
只要copy其Unicode码到代码中就可以了。
/
不过,这种做法显然不是很友好。首先,我们每次使用Icon之前都要从这张关系表中查找;其次,你确定下次代码中看到这串数字是
对应什么图标吗(更不用说其他人了)?所以,我们需要更优雅的方法来管理自定义图标。
其实做法也简单,我们可以创建一个自定义图标的类:
class AntdIcons {
static const IconData checkCircle = IconData(0xe77d, fontFamily: ‘AntdIcons’);
static const IconData CI = IconData(0xe77e, fontFamily: ‘AntdIcons’);
static const IconData Dollar = IconData(0xe77f, fontFamily: ‘AntdIcons’);

}
然后使用方法就变成了:
Icon(
AntdIcons.checkCircle,
size: 20,
color: Colors.black
)
以上代码完全等同于前面直接使用Unicode码的效果。不过要想用上所有的图标,我们还得丰富AntdIcons这个类。为此,可以写上一
段小脚本,在demo_index.html浏览器窗口的控制台中运行就能得到定义IconData的代码:
function camelCase(str) {
return str.replace(/[ -]+(\w)/g, (match, char) => char.toUpperCase());
}
function makeCode({name, code}) {
return static const IconData ${camelCase(name)} = IconData(0${code.substr(2, 5)}, fontFamily: 'antd-icons');\n;
}
Array
.from(document.querySelectorAll(‘.unicode .dib’))
.map(element => {
return {
name: element.querySelector(‘.name’).innerText,
code: element.querySelector(‘.code-name’).innerText
};
})
.map(makeCode)
.join(‘\n’);

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=7227,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?