特性: 图标包的树摇动
作者: FeodorFitsner创建于 2025年8月15日更新于 2026年9月4日
这是在#5468,#5556的续作.
巨型集像Matrial system需要树摇图标. 没有树摇晃的设定会给应用程序捆绑增加大约30 MB !
这个想法:
- 在
Flet Building ' 扫描Python程序编码库时,查找从Flet'继承的所有铝的图标值。 例如:ft.Icons.ABC'或ft.CupertinoIcons.ALARM'。 - 在
flet building'模板中,在达特一侧重写getIconData'方法,该方法从前一步骤所找到的硬码图标列表中返回`IconData'。 例如:
达特 切换( iconCode) { 大小写 0x0001: 回放。 图标。 乙型六氯环己烷; 0x0002:回放. CupertinoIcons.ALARM; 存档副本. 默认: 返回为无效; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
* 由于没有参考的 Dart 编译器的`materialIcons' 或`cupertinoIcons' 列表将显示图标并只留下开关中使用的图标。
< 细节>
<摘要> 图标扫描器的虚拟编码原型 </摘要 >
[Python]
导入点
导入导入lib
从 pathlib 导入路径
从类型导入模块Type
从输入选项、 设置、 调制解调器
def 解析 enum 引用 ()
模块:模块Type,类 名称:str,成员 名称:str
) - > 可选[对象]:
尝试 :
enum class = getatr(模块,类 名称,无)
如果 enum class 和 hasattr( enum class, 成员 名称) :
返回 getattr( enum class, 成员 名称)
除外:
通过
无
def find icon usages( source code: str) - > 设置 [Tuple [str, str]]:
已使用逗号 = set ()
类 Iconvisitor( ast. nodevisitor) :
def 访问 属性( 本身, 节点: ast. 属性) :
完整链 = []
当前=节点
状态时( 当前, 天体) 。 属性 :
完整链. append( 当前. attr)
当前值 = 当前值
如果存在( 当前, ast) 。 名称 :
完整链. append( 当前. id)
full chain = 列表(已更改(full chain))
如果len(full chain) == 3和full chain [0] ==="ft":
enum class = 全链 [1]
图标 名称=完整 链 [2]
已使用的 icons.add(( enum class, 图标 名))
自行.generic visit(节点)
树 = ast.parse( source code)
图标Visitor (. visit (树)
返回已使用逗号
def 扫描 project icons( root dir: Path) - > 设置 [Tuple [str, str]] :
全部( U)
用于root dir.rglob ("*.py") 中的文件 :
尝试 :
source=文件.read text(编码="utf-8").
已找到 = find icon usages(来源)
如果找到的话:
打印(f) {file. relative to(root dir)}: { found}"
所有已使用的 icons.update(已找到)
例外作为e:
打印(f) QQ 错误读取{文件} :{e}"
返回全部已使用( C)
def 打印 已解析 icons ()
使用: 设置 [Tuple [str, str]],
enum module: str, (中文(简体) ).
图标 base class path: str,
:
base mod path, base class name=图标 base class path.rsplit (""), 1)
base mod = 导入lib.import module(base mod path)
图标DataBase =
. . . . . . .内容来源: flet-dev/flet