import 'dart:io'; import 'utils.dart'; /// 自动生成图标数据文件 /// /// 从 iconfont.json 文件读取图标信息,生成 Dart 代码 void main() { final iconData = readIconFontJson(); final icons = getGlyphs(iconData); final StringBuffer buffer = StringBuffer(); // 添加文件头部 buffer.writeln("import 'package:flutter/widgets.dart';"); buffer.writeln("import 'yx_icon_data.dart';"); buffer.writeln(); buffer.writeln("/// 学习官OA系统图标字体数据"); buffer.writeln("/// "); buffer.writeln("/// 包含所有图标的常量定义,可以直接在 Flutter 的 Icon 组件中使用"); buffer.writeln("/// 也可以使用专门的 YXIcon 组件"); buffer.writeln("class YXIconFonts {"); buffer.writeln(" // 私有构造函数,防止实例化"); buffer.writeln(" YXIconFonts._();"); buffer.writeln(); // 生成图标常量 for (final Map icon in icons) { final String name = icon['name'] as String; final String unicode = icon['unicode'] as String; // 转换为驼峰命名并处理特殊字符 final String camelCaseName = toCamelCase(name); // 添加注释 buffer.writeln(" /// $name 图标"); buffer.writeln(" /// "); buffer.writeln(" /// Unicode: $unicode"); buffer.writeln(" static const IconData $camelCaseName = YXIconData(0x$unicode);"); buffer.writeln(); } buffer.writeln("}"); // 写入文件 final File outputFile = File('lib/src/yx_icon_fonts_data.dart'); outputFile.writeAsStringSync(buffer.toString()); print('✅ 图标数据文件生成成功: [32m${outputFile.path} [0m'); print('📊 共生成 ${icons.length} 个图标常量'); }