Flutter for OpenHarmony: Flutter 三方库 icon_font_generator 自动化将 SVG 图标集转化为字体文件(鸿蒙矢量资源全自动管理)

Flutter for OpenHarmony: Flutter 三方库 icon_font_generator 自动化将 SVG 图标集转化为字体文件(鸿蒙矢量资源全自动管理)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

请添加图片描述

前言

在 OpenHarmony 应用中,为了保证在不同分辨率屏幕(手机、折叠屏、平板)下图标都能保持绝对清晰,且为了减小 HAP 包体积,使用“字体图标”取代“位图图片”是业界公认的标准方案。

icon_font_generator 是一个强大的命令行工具。它能将一整组 SVG 图标自动打包成一个 .ttf 字体文件,并同步生成 Dart 类。开发者只需关注 SVG 文件的增删,剩余的同步工作全部自动化。

一、全自动构建链路

命令行扫描

强类型访问

assets/ohos_icons/*.svg (原始素材)

icon_font_generator

assets/fonts/OhosIcons.ttf (单字体文件)

lib/generated/ohos_icons.dart (自动生成类)

鸿蒙 Flutter UI

在鸿蒙开发中,我们绝不推荐手写 IconData 的内存地址。通过以下流程,可以实现资产的自动化转换:

1. 准备 SVG 素材

将设计师导出的 .svg 图标文件统一放入工程资产目录:

  • 存储路径:assets/ohos_icons/*.svg

2. 执行自动化构建指令

在项目根目录运行以下命令,工具会自动扫描 SVG、生成字体文件并创建 Dart 调用类:

# 💡 核心指令:一键生成鸿蒙图标资产 flutter pub run icon_font_generator \ --from=assets/ohos_icons \ --to=assets/fonts/OhosIcons.ttf \ --out=lib/generated/ohos_icons.dart \ --class-name=OhosIcons 

3. 在 pubspec.yaml 中注册

生成的 .ttf 必须在配置文件中声明方可生效:

flutter:fonts:-family: OhosIcons fonts:-asset: assets/fonts/OhosIcons.ttf 

二、核心 API 实战

2.1 字体图标基础加载

通过工具生成的静态变量,你可以像使用 Icons.home 一样访问自定义图标,无需记忆十六进制代码。

// 💡 核心 API: 访问生成的自定义图标 (OhosIcons 为自动生成的类)Icon(OhosIcons.home, size:24, color:Colors.blue)
在这里插入图片描述

2.2 自定义图标样式

字体图标本质上是文本。它们可以完美支持颜色叠加、阴影、渐变以及混合模式。

// 💡 核心 API: 为字体图标添加特定的阴影效果Icon(OhosIcons.scanner, shadows:[Shadow(color:Colors.black26, offset:Offset(0,4), blurRadius:10)],)
在这里插入图片描述

2.3 动态映射图标

当图标选择来自后端(如后台配置的任务列表)时,配合 Map 映射表,可以极大地简化业务逻辑。

// 💡 核心 API: 建立 API 响应与字体图标的动态映射staticconstMap<String,IconData> iconMapping ={'home':OhosIcons.home,'user':OhosIcons.person,};
在这里插入图片描述

三、OpenHarmony 平台适配

3.1 资产注册注意

在鸿蒙工程中,生成的 .ttf 文件必须在 pubspec.yamlfonts 节点下正确声明,且 family 名称必须与生成的 Dart 代码中 fontFamily 固定值完全匹配,否则会出现显示为“方块(乱码)”的问题。

3.2 高刷性能优势

💡 提示:相比于加载大量的 .png 图片导致鸿蒙设备主线程解码压力过大,字体图标加载极为迅速。在滑动长列表(如金刚区菜单)时,字体图标几乎不会造成任何掉帧(Jank)。

四、完整实战示例:鸿蒙风格图标资产中心

本示例演示如何通过模拟生成的 OhosIcons 类构建一套标准的鸿蒙金刚区菜单系统。

classOhosIconMenuextendsStatelessWidget{@overrideWidgetbuild(BuildContext context){returnGridView.count( crossAxisCount:4, children:[_buildItem(OhosIcons.scanner,"扫一扫"),_buildItem(OhosIcons.payment,"钱包"),_buildItem(OhosIcons.message,"行程"),_buildItem(OhosIcons.settings,"更多"),],);}Widget_buildItem(IconData icon,String label){returnColumn( children:[// 💡 字体图标加载性能极佳Icon(icon, color:Colors.blueAccent, size:30),Text(label, style:TextStyle(fontSize:12)),],);}}
在这里插入图片描述

五、总结

icon_font_generator 将 OpenHarmony 应用的资源管理提升到了自动化水平。它通过单一字体文件解决了碎片化图片的管理难题,不仅极大地优化了应用的运行性能,还统一了 UI 层的调用标准。对于任何追求极致轻量化和视觉一致性的鸿蒙项目,这都是一套必选的基本建设。

Read more

拯救者Y7000p 2024款安装ubuntu20.04无wifi问题

目录 电脑型号 问题描述 解决方法 方法一:安装网卡驱动 一、确定是否为网卡驱动问题 二、查看网卡型号 三、安装依赖库 四、安装驱动 五、激活对应内核 六、如果还不成功(笔者是在到一步才真正解决) 七、参考链接 方法二:升级内核版本 电脑型号 拯救者Y7000P2024;网卡型号:瑞昱rlt8852ce;ubuntu:20.04;显卡:GTX4060;ubuntu内核:5.15.0-113 问题描述 在安装完ubuntu20.04后发现wifi图标不存在且无法连接无线网 解决方法 此时 ubuntu 系统没有网络,可以使用 USB 数据线连接手机,用手机的网络共享给电脑进行如下操作,或者给电脑插网线,或者插网卡。 确保已经关闭BIOS安全启动

By Ne0inhk
Linux的写作日记:Linux基础开发工具(一)

Linux的写作日记:Linux基础开发工具(一)

前言         经过了之前的Linux学习,相信各位读者已经知道了Linux是什么,并掌握了基本的指令操作。接下来,我们将开启新的航程,驶向Linux基础开发工具的广阔海洋!         在本章节中,你将学会强大的软件包管理器、高效的Vim编辑器、核心的编译器gcc/g++以及版本控制工具git等等。是不是已经干劲十足了?         各位船员请就位,我们的Linux探索之舟,现在扬帆起航! 1.之前权限留下的小尾巴 1.1.目录权限         下面我先给各位读者留下一个小问题:如果我想要进入一个目录,需要什么权限捏?这个问题我先不告诉各位答案,下面我们通过控制变量法来看看这个问题的答案到底是什么,首先我们要创建好一个目录,如下所示。         此时不难看出,这个目录的拥有者和所属组具有所有的权限,而其他用户没有写的权限,下面我们先把使用者的r权限去掉,关于权限如何去掉,我在上篇文章已经说明了,忘记的读者可以看看我上一篇的文章(阅读量这不就上来了(#^.^#)),此时权限就如下所示。         此时我们尝试进入目录,发现是可以进入目录的

By Ne0inhk
【Linux系统编程】(三十四)初识进程信号:Linux 软中断的核心奥秘

【Linux系统编程】(三十四)初识进程信号:Linux 软中断的核心奥秘

目录 前言 一、从生活场景理解信号:原来信号这么简单 1.1 快递的故事:完美映射信号处理流程 1.2 生活场景到 Linux 信号的核心结论 二、技术视角:Linux 进程信号的初体验 2.1 第一个实验:Ctrl+C的本质 —— 向前台进程发送 2 号信号SIGINT 代码实现:sig_hello.c 编译运行 2.2 第二个实验:修改信号处理方式 —— 让Ctrl+C不再终止进程 2.2.1 signal函数介绍 2.2.2 代码实现:sig_catch.c 2.2.

By Ne0inhk
老 MacBook 别扔!装 Linux 部署 OpenClaw 变身 24h 服务器

老 MacBook 别扔!装 Linux 部署 OpenClaw 变身 24h 服务器

老 MacBook 别扔!装 Linux 部署 OpenClaw 变身 24h 服务器 很多用户手中都有老款的 MacBook,这些设备虽然已经不适合作为主力办公电脑,但它们的性能依然足以运行 OpenClaw 本地 AI 服务。本文将详细介绍如何将老款 MacBook 改造为 24 小时运行的 OpenClaw 服务器。 一、硬件评估 1.1 老款 MacBook 型号支持 型号CPU内存存储兼容性推荐度MacBook Pro 2012 (13寸)i5-3210M8GB256GB SSD良好⭐⭐⭐MacBook Pro 2013 (13寸)i5-4258U8GB256GB SSD良好⭐⭐⭐⭐MacBook Pro 2014 (13寸)i5-4278U<

By Ne0inhk