用途:为在 Script Kit 中用 GPUI 编写界面提供实战模式与示例,包括 UI 代码、键盘事件、状态管理与布局。
主要能力: 布局链需按顺序组合:layout(flex*)→ sizing(w/h)→ spacing(px/gap)→ visual(bg/border)。条件渲染用 when / when_some。 键盘处理是重点:从 crate::ui_foundation 引入 is_key_up、is_key_down、is_key_enter、is_key_escape、is_key_backspace、printable_char 等辅助函数,在 render 中通过 .track_focus(&self.focus_handle) 加 .on_key_down(cx.listener(...)) 加 .child(...) 三件套接收事件;可打印字符用 printable_char(event.keystroke.key_char.as_deref())。处理完按键可调用 cx.stop_propagation() 阻止父级重复响应,未处理时用 cx.propagate() 冒泡。 列表:使用 uniform_list(固定行高约 52px)配合 UniformListScrollHandle,滚动到指定项用 scroll_to_item(index, ScrollStrategy::Nearest)。 主题:使用 theme.colors.*,不要硬编码 rgb(0x...);聚焦相关颜色用 theme.get_colors(is_focused),聚焦状态变化后更新并调用 cx.notify()。 状态与生命周期:任何影响渲染的状态变更后调用 cx.notify();避免在 render() 内用 cx.new() 创建实体,否则每帧新建并泄漏订阅,应在构造器创建并存到结构体上;订阅需存于视图结构体(如 Vec<Subscription>),否则会被丢弃。异步用 cx.spawn() 获取 WeakEntity 与 AsyncApp,再用 this.update(cx, ...).ok() 回到 UI;fire-and-forget 用 .detach();任务存为 Option<Task<>> 或 Vec<Task<>>,丢弃即取消,可用代数(load_generation)避免过期结果。
适用场景:Script Kit 中需要键盘驱动、虚拟列表、焦点感知的主题化 UI。限制:资料以模式要点为主,未提供完整项目结构、依赖版本或安装命令;具体 API 细节以实际代码为准。