yx_icon_fonts_flutter/scripts/generate_icons.dart

49 lines
1.7 KiB
Dart

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<String, dynamic> 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} 个图标常量');
}