SuperAPI AI 工具集

robius-event-action

编程与开发

查看项目

更新于 10-16 04:22

技能介绍

用途

本技能面向使用 Makepad 框架(Rust)开发 Robius 应用(如 Robrix、Moly)的场景,聚焦于事件处理与动作(action)模式,帮助开发者在控件与 App 之间建立清晰、可维护的通信机制。

主要能力

技能总结了若干核心模式:

  1. 自定义动作模式:通过定义领域特定的动作枚举(如 MessageAction)并附带数据(如 MessageDetails),为控件动作提供类型化定义。所有动作枚举需派生出 DefaultNone,并包含 None 默认变体。

  2. 从控件发射动作:在控件的 handle_event 中通过 cx.widget_action(self.widget_uid(), &scope.path, Action::Variant) 发射动作,例如点击、长按等交互触发的动作。

  3. App 中集中处理动作:实现 MatchEvent trait,在 handle_actions 中集中处理。文中给出了四种模式:非控件动作使用 downcast_ref;控件动作使用 as_widget_action().cast();对枚举变体进行 downcast_ref 匹配;模态框动作处理。处理完成后使用 continue。

  4. 动作类型区分:控件动作(UI 线程、同帧处理)、Posted 动作(来自异步任务,在下一事件周期接收,需配合 SignalToUI::set_ui_signal() 唤醒 UI 线程)、全局动作(使用 cx.action() 进行应用级状态变更)。

  5. 事件处理模式:包括命中测试(Hit::FingerDown/FingerUp/FingerMove/FingerHoverIn/FingerHoverOut/FingerScroll)、键盘事件(Event::KeyDown 与 KeyCode 区分)、信号事件(Event::Signal 轮询待处理更新队列)。

  6. 动作链式模式:子控件发射动作,父控件捕获并补充上下文后再转发给 App。

使用方式

在 Makepad 项目中定义动作枚举并使用 #[derive(Clone, DefaultNone, Debug)];控件事件中调用 cx.widget_action;App 中实现 MatchEvent 的 handle_startup 与 handle_actions,并在 AppMain::handle_event 中调用 self.match_event(cx, event) 与 self.ui.handle_event(cx, event, scope)。异步场景使用 Cx::post_action 与 SignalToUI::set_ui_signal()。

适用场景

适用于 Makepad 应用中的自定义动作实现、控件事件处理、App 层集中式动作处理、控件间通信,参考代码库为 Robrix(Matrix 聊天客户端)与 Moly(AI 聊天应用)。

最佳实践(据技能内容)

所有动作枚举使用 DefaultNone 派生并含 None 变体;处理动作后使用 continue;异步动作使用 downcast_ref,UI 动作使用 as_widget_action().cast();异步 post 后始终调用 SignalToUI::set_ui_signal();将动作处理集中在 App::handle_actions;动作命名具描述性。

限制

技能提供的参考文件(references/action-patterns.md、references/event-handling.md、references/moly-action-patterns.md)内容未在此资料中展开,部分细节(如 Timer 重试、单选导航、平台条件动作、UiRunner 事件处理)仅有标题列出,具体实现暂未提供。