Flutter for OpenHarmony:icon_font_generator — 自动化图标字体工作流

Flutter for OpenHarmony:icon_font_generator — 自动化图标字体工作流

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

在这里插入图片描述

前言

在鸿蒙(OpenHarmony)应用中,使用 IconFont 是优化性能与包体积的最佳实践。icon_font_generator 命令行工具能将 SVG 图标一键转换为 .ttf 字体文件并生成 Dart 引用类,大幅提升了图标资产管理的自动化程度。

一、核心价值

1.1 基础概念

图标字体的本质是将矢量图映射到字体的特定“码点”(Glyph)上。

引用名字

SVG 图标文件夹

icon_font_generator

HarmonyIcons.ttf: 字体文件

harmony_icons.dark: 代码类

IconData: 名字对应码点

鸿蒙 UI 页面

1.2 进阶概念

  • 自动化命名:根据 SVG 文件名(如 home_active.svg)自动生成 Dart 变量名(static const homeActive = ...)。
  • 零配置成本:无需开启庞大的第三方设计网站,在鸿蒙工程本地即可完成闭环。

二、核心 API / 组件详解

2.1 安装与运行

这是一个纯粹的 CLI 工具。推荐作为开发依赖加入当前项目,以便团队协作和 CI/CD 环境:

# 作为开发依赖安装到当前项目 flutter pub add --dev icon_font_generator # 在鸿蒙工程根目录执行一键转换(注意可执行文件名称) dart run icon_font_generator:generator assets/svgs assets/fonts/MyIcons.ttf --class-name MyIcons --output-class-file lib/src/icons/my_icons.dart 

2.2 在鸿蒙工程中注册字体

修改 pubspec.yaml

flutter:fonts:-family: MyIcons fonts:-asset: assets/fonts/MyIcons.ttf 
在这里插入图片描述

三、场景示例

3.1 场景一:鸿蒙级项目的“统一度量衡”

当设计师新增了 10 个业务图标时,开发者只需将 SVG 丢入文件夹,跑一次命令,即可在代码中直接调用,完全不需要管 Unicode。

// 💡 技巧:生成的代码通常如下,极其直观import'package:your_app/gen/my_icons.dart';WidgetbuildIcon(){returnconstIcon(MyIcons.scanner_filled, color:Colors.blue);}
在这里插入图片描述

四、OpenHarmony 平台适配挑战

4.1 字体文件的实时加载与缓存

在鸿蒙特定的元服务(元服务卡片)中,字体文件的大小直接影响加载延迟。

适配策略建议

  1. 子集化生成icon_font_generator 只包含你目录下的图标,确保了 .ttf 文件的极致精简。
  2. 预览校验:由于 SVG 转换为字体 Glyphs 时可能会出现路径闭合问题。建议在运行完命令后,通过鸿蒙预览器快速查看一次图标是否有“实心”或“缺失”现象。
# 💡 技巧:使用 --output-class-file 指定生成代码的位置,方便鸿蒙工程管理 dart run icon_font_generator:generator assets/svgs assets/fonts/MyIcons.ttf --class-name MyIcons --output-class-file lib/src/icons/my_icons.dart 
在这里插入图片描述

五、综合实战示例代码

这是一个演示如何利用生成的图标字体构建鸿蒙侧边栏导航的示例:

import'package:flutter/material.dart';// 假设已通过工具生成了 HarmonyIcons 类// import 'package:app/icons/harmony_icons.dart';classHarmonyDrawerMenuextendsStatelessWidget{constHarmonyDrawerMenu({super.key});@overrideWidgetbuild(BuildContext context){returnDrawer( child:ListView( children:[constDrawerHeader(child:Text('鸿蒙业务中心')),_buildItem('数据看板',Icons.dashboard),// 💡 以后可替换为 HarmonyIcons.dashboard_buildItem('分布式流转',Icons.sync_alt),_buildItem('设置',Icons.settings),],),);}Widget_buildItem(String title,IconData icon){returnListTile( leading:Icon(icon, color:Colors.blue), title:Text(title), onTap:(){},);}}

六、总结

icon_font_generator 彻底终结了“人工维护图标 Unicode 码”的历史。它让 UI 资源到代码的转化过程变得极其工业化、自动化。

核心建议

  1. 建立专门的 assets/icons_src 文件夹存放原始 SVG。
  2. 将生成命令加入到鸿蒙项目的 pre-commit 钩子或简单的 shell 脚本中,实现真正的一键同步。

Read more

计算机毕业设计java基于Java的物业管理系统 基于SpringBoot的智慧社区物业综合管理平台 设计住宅小区物业服务与业主报修系统的研发

计算机毕业设计java基于Java的物业管理系统 基于SpringBoot的智慧社区物业综合管理平台 设计住宅小区物业服务与业主报修系统的研发

计算机毕业设计java基于Java的物业管理系统97wd59 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 随着城市化进程的加快和住宅小区的规模化发展,物业管理在社区治理和居民生活中扮演着越来越重要的角色。传统物业管理方式依赖人工登记、电话沟通和纸质单据,存在信息更新滞后、报修处理缓慢、费用收缴混乱、投诉反馈不畅等问题,给物业管理人员和业主带来了诸多不便。尤其是在停车管理、费用催缴、维修报备等环节,缺乏系统化支持直接影响服务质量和居民满意度。为解决这一痛点,本系统基于Java技术与SpringBoot框架,结合MySQL数据库,设计并开发了一套功能完善的物业管理系统,旨在为物业公司提供高效的运营管理工具,同时为业主打造便捷的线上服务平台。 本系统围绕物业管理与业主服务的核心业务,构建了以下功能模块: * 业主管理:记录业主详细信息,包括业主账号、姓名、性别、楼房号、车牌号、联系方式、头像等 * 车位信息管理:管理小区车位资源,包括车位编号、车位名称、图片、位置、车位状态、发布时间、详情等 * 停车信

By Ne0inhk
运用Java及SunriseSunsetCalculator,探寻长沙市的理论日照时长

运用Java及SunriseSunsetCalculator,探寻长沙市的理论日照时长

目录 前言 一、理论日照时长简介 1、理论日照时长计算 2、理论日照时长数学计算 二、SunriseSunsetCalculator求解 1、SunriseSunsetCalculator引入 2、时区计算设置 3、理论时长计算 4、完整的代码及日常统计 三、总结 前言         在地理学与气象学的研究领域,日照时长一直是备受关注的重要指标。它不仅与地球的自转、公转以及大气环流等诸多自然因素紧密相连,更对人类的生产生活有着深远的影响。从农作物的生长周期到太阳能资源的开发利用,从城市的规划布局到居民的健康生活,日照时长都扮演着不可或缺的角色。而长沙市,作为湖南省的省会城市,以其独特而复杂的地理环境和气候特征,其日照时长的研究具有重要的现实意义和学术价值。         长沙市地处中国南方,属于亚热带季风气候区。这里四季分明,降水充沛,但同时也存在着云层覆盖多、日照时间相对较短等特点。随着城市化进程的加速和经济的快速发展,对于日照时长的精准把握需求日益迫切。一方面,城市规划者需要了解日照时长的分布规律,以合理规划城市建筑布局,确保居民住宅和公共设施能

By Ne0inhk

Java 反射

Java 反射 Java 反射(Reflection)是 Java 语言的一个强大特性,它允许在运行时动态地获取类的信息并操作对象,即使在编译时并不知道这些类的具体结构。 ✅ 一句话理解反射: “程序可以在运行时查看、调用自身或外部类的属性、方法、构造器等,而无需在编译时硬编码。” 一、反射能做什么? 通过反射,你可以: 1. 获取类的 Class 对象 2. 查看类的字段(Field)、方法(Method)、构造器(Constructor) 3. 创建对象实例(即使构造器是 private) 4. 调用任意方法(包括 private 方法) 5. 读写任意字段(包括 private 字段) ⚠️ 注意:反射会绕过访问控制检查(如 private),但需先调用

By Ne0inhk
基于Java的财务报销管理系统的设计与实现

基于Java的财务报销管理系统的设计与实现

一、研究目的 在教育信息化深度推进的背景下,传统校园财务报销模式存在流程繁琐、人工审核效率低、单据管理混乱、数据统计滞后等痛点,难以满足师生便捷报销、财务部门精准管控的需求[1]。同时,高校经费来源多元化、报销业务量激增、审计合规性要求提升,倒逼财务工作数字化转型。在此趋势下,构建校园财务报销管理系统,成为优化报销流程、降低管理成本、提升服务质量与监管效能的必然选择。 本选题旨在针对传统校园财务报销流程繁琐、人工审核效率低下、单据管理混乱、数据统计不及时等痛点,设计并实现一套数字化、智能化的财务报销管理系统[2]。通过线上提交、自动审核、数据联动等功能,简化报销流程,降低财务人员工作强度,提升报销效率与数据准确性;同时强化经费使用监管,规范报销审批流程,满足高校经费多元化管理需求,为师生提供便捷、高效的财务服务,推动校园财务管理数字化转型[3]。 本选题具有重要的实践价值与应用意义,可从师生用户、财务部门、校园管理三个角度分析:对师生而言,系统实现报销流程线上化,简化提交、审批步骤,减少往返奔波,提升报销体验;

By Ne0inhk