Skip to content

Commit

Permalink
添加flutter对应的dart生成脚本
Browse files Browse the repository at this point in the history
  • Loading branch information
Luozf12345 committed Nov 14, 2024
1 parent 15ba55f commit 07d5631
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README-zh_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ TDesign Icon 仓库负责生产和构建 TDesign 所有图标相关的资源和

如果更新了原始图标资源之后,请务必运行 `pnpm run generate` 命令。

:flutter除了生成ttf外,还需要生成对应的dart文件,需要本地配置了dart运行环境,然后执行packages/flutter/gen_dart_file.dart脚本,对应dart文件会生成在packages/flutter/output/目录下

## 更新版本号及 CHANGELOG 🔖

在根目录运行 `npx changeset`,根据具体情况依次选择各个包的版本号变更规则,并填下 `CHANGELOG`的内容。
Expand Down
80 changes: 80 additions & 0 deletions packages/flutter/gen_dart_file.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import 'dart:convert';
import 'dart:io';

void main(){
var indexPath = "../../resources/icon-font/dist/index.json";
var outputPath = "output/td_icons.dart";
var indexFile = File(indexPath);
if(!indexFile.existsSync()){
print("indexFile is not exist");
return ;
}
var indexContent = indexFile.readAsStringSync().replaceFirst('"\\\\E842"},]}', '"\\\\E842"}]}');
print("indexContent:\n$indexContent");
var jsonObj = jsonDecode(indexContent);
var iconsJson = jsonObj["icons"];
if(iconsJson is List){
var iconList = <IconModel>[];
iconsJson.forEach((element) {
var model = IconModel();
model.name = (element["name"] as String).replaceAll("-", '_');
model.codepoint = (element["codepoint"] as String).replaceAll("\\", '');
iconList.add(model);
});

print("iconList:\n$iconList");

var fileSb = StringBuffer(fileStart);
var varSb = StringBuffer();
var mapSb = StringBuffer(" static const all = <String, _TDIconsData>{");
iconList.forEach((model) {
varSb.writeln(" static const ${model.name} = _TDIconsData(0x${model.codepoint}, '${model.name}');");
mapSb.writeln(" '${model.name}': ${model.name},");
});
fileSb.writeln(varSb);
fileSb.writeln(mapSb);
fileSb.writeln(fileEnd);

// 输出文件
var outputFile = File(outputPath);
if(!outputFile.existsSync()){
outputFile.createSync(recursive: true);
}
outputFile.writeAsStringSync(fileSb.toString());
}
}

class IconModel {
String name = "";
String codepoint = "";
}

var fileStart = '''
import 'package:flutter/widgets.dart';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: non_constant_identifier_names
// ignore_for_file: constant_identifier_names
@immutable
class _TDIconsData extends IconData {
const _TDIconsData(int codePoint, this.name)
: super(
codePoint,
fontFamily: 'TDIcons',
fontPackage: 'tdesign_flutter',
);
final String name;
}
class TDIcons {
/// 私有构造方法,不支持外部创建,仅提供静态常量给外部使用
const TDIcons._();
''';

var fileEnd = '''
};
}
''';

0 comments on commit 07d5631

Please sign in to comment.