用途
本技能是一份 Makepad 2.0 与 Splash 脚本语言的常见错误与排错指南,用于在构建 Makepad 2.0 界面时快速定位渲染、布局和脚本解析问题。每条“坑”都按统一结构说明:用户看到的现象(症状)、为什么会发生(根本原因)、如何修复(正确代码)。参考文档为 AGENTS.md 与 splash.md。
主要能力(逐条排错项)
-
容器高度为 0px、UI 不可见:所有基于 View 的容器(View、SolidView、RoundedView 等)默认 height: Fill。当 Fill 容器放在 Fit 父级中时,高度因循环依赖解析为 0px。修复:对需要包裹内容的容器设置 height: Fit。在固定高度父级内 height: Fill 是有效的。
-
彩色背景上文字不可见、缺少 new_batch:Makepad 按着色器类型批处理绘制调用。没有 new_batch: true 时,文字绘制可能先于背景执行,被不透明背景遮住。修复:对任何带可见背景(show_bg: true 或 SolidView、RoundedView 等)且包含文字子控件的 View 容器添加 new_batch: true。
-
命名子控件覆盖不生效、用了 : 而非 :=:在 Splash 中,: 创建静态属性,:= 创建可寻址、可覆盖的命名子控件。修复:对需要引用或覆盖的子控件使用 :=。另外,匿名容器内的命名子控件不可达,从根到子控件的路径上每个容器都必须命名。
-
含字母 e 的十六进制颜色渲染错误或解析报错:script_mod!{} 内的 Rust 分词器会把数字后的 e 当作科学计数法。修复:对任何含 e 或 E 的十六进制颜色使用 #x 前缀。不含 e 的颜色用普通 # 即可。
-
border_radius 类型错误、必须是 float 而非 Inset:圆角半径是应用于所有角的单个 f32 值,不是按角的 Inset 结构。属性名随上下文不同:Canvas Splash(POST /splash)中用 draw_bg.radius 加尾点浮点数;script_mod! 宏中用 draw_bg.border_radius。按角设置半径需使用 RoundedAllView 配合 vec4。
-
从 Rust 找不到控件、注册顺序错误:Makepad 2.0 中控件模块必须按正确顺序通过 script_mod(vm) 注册。基础控件先于自定义控件,自定义控件先于使用它们的 UI。修复:在 App::run() 中按顺序注册基础控件库、自定义控件模块、应用 UI 模块,最后用 App::from_script_mod 创建应用。
-
Filler 裁剪文字、与 width: Fill 兄弟节点并用:Filler{} 定义为 View{width: Fill height: Fill},与同样 width: Fill 的兄弟节点会各分一半空间。修复:当兄弟节点已使用 width: Fill 时移除 Filler{}。Filler 适合放在 Fit 尺寸的兄弟节点之间。
-
悬停时文字消失、动画 View 缺少 new_batch:悬停动画把背景从透明变为不透明,没有 new_batch: true 时背景与文字在同一批次,背景会盖住文字。修复:对带 show_bg: true、有悬停动画且包含文字的 View 添加 new_batch: true。
-
Splash 中的逗号:Splash 以空白分隔,分词器把逗号当空白静默消费,不会报错。带逗号与不带逗号两种风格都有效,应与周围代码风格保持一致,不必浪费时间删除已有代码中的逗号。
-
使用分号:Splash 不用分号结束语句,分号会被当作属性值的一部分或导致分词失败。修复:移除所有分号。
-
根容器缺少 width: Fill、布局过窄或损坏:最外层容器用固定像素宽度不会适应窗口。修复:根容器始终使用 width: Fill,内部元素可用固定像素宽度。
-
Label 不支持 Animator、被静默忽略:Label(以及 H1-H4、P、TextBox、Image、Icon、Markdown、Html、Slider、DropDown、Splitter、Hr、Filler)没有 animator 字段,添加会被静默忽略。修复:把 Label 包在支持 animator 的 View 中。支持 animator 的控件包括 View、SolidView、RoundedView、ScrollXView、ScrollYView、ScrollXYView、Button、ButtonFlat、ButtonFlatter、CheckBox、Toggle、RadioButton、LinkLabel、TextInput。
-
默认文字颜色为白色、在浅色背景上不可见:所有文字控件默认白色(#fff)。修复:显式设置文字颜色。
使用方式
该技能以触发词方式使用,触发条件包括 makepad error、makepad bug、makepad problem、makepad issue、makepad not 等。当遇到 Makepad 2.0 相关报错或异常表现时,可对照本指南逐条排查。每条坑都给出错误代码与正确代码示例,可直接对照修改。
适用场景
适用于使用 Makepad 2.0 和 Splash 脚本语言构建 UI 的开发者,尤其是从 Makepad 1.x、CSS、JavaScript 或 Rust 背景迁移、容易在语法和布局上踩坑的场景。覆盖渲染不可见、布局错乱、脚本解析报错、控件注册失败、悬停交互异常等常见问题。
限制
资料未提供该技能的安装命令、依赖要求、版本兼容范围、收费方式或平台支持信息,暂未提供。本指南仅覆盖资料中列出的 13 类常见问题,不保证涵盖所有 Makepad 2.0 错误。