49 lines
1.7 KiB
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} 个图标常量');
|
|
}
|