a2ui-dioxus
English | 中文
📦 a2ui crate 生态成员 · Dioxus 响应式 WebView 桌面后端(可选)
本 crate 是
a2uiworkspace 的第六渲染后端,完整介绍见根目录 README。
把 A2UI 组件树渲染到原生桌面 WebView 窗口,基于 Dioxus(响应式 signals 架构,固定 0.7)。在六个后端里这是架构上最独特的一个:
- 响应式 signals —— Dioxus 像 React:运行时状态放在根组件的
Signal里,UI 是对它的纯读取。所以——既不需要 Iced 后端的Message枚举(Elm view/update),也不需要 egui 后端的EditBuffers状态桥(即时模式整帧借用 data model)。无消息枚举,无状态桥。信号本身就是交互通道:任何写入都会自动重渲染订阅了它的组件。 - 递归组件 —— 整棵树就是一个
A2uiNode组件,它逐节点渲染自身(Dioxus 原生支持递归组件,不像 Slint 要 bounded-depth codegen)。 - WebView 渲染 —— Dioxus desktop 渲染到系统 WebView(Linux 用 WebKitGTK),所以深色主题是一份 CSS 样式表(
theme::STYLESHEET),而非一组逐控件的 style 函数;A2UI 组件种类映射到普通 HTML 元素 + class。
Button 的点击同样复用共享的 core::components::dispatch_event + apply_event_result(经 context 注入的 Rc<dyn Fn(String)> 回调上交到 gallery 根处理)。
可选依赖:本 crate 是 workspace 的非默认成员(会拉取 wry WebView + tao 窗口栈),普通
cargo build不编译它。
在生态中的位置
┌────────────────────────────────────────────────────────────────────────────┐
│ apps: a2ui-gallery (TUI) a2ui-{slint,egui,bevy,iced,dioxus}-gallery │
│ umbrella: a2ui (re-export core + tui [+ slint] [+ egui] [+ bevy] [+ iced] [+ dioxus]) │
│ ▶ backends: a2ui-tui (ratatui) a2ui-{slint,egui,bevy,iced,dioxus} │
│ a2ui-base (框架无关:Protocol / Model / Catalog / Processor) │
└────────────────────────────────────────────────────────────────────────────┘
a2ui-dioxus 只依赖 a2ui-base;被 a2ui-dioxus-gallery 与(在 dioxus feature 下的)umbrella a2ui 依赖。
构建
一切代码都在 backend cargo feature 之后,它才拉入 Dioxus desktop 运行时(wry WebView + tao 窗口)。不带该 feature 时,本 crate 只是个空壳(除 a2ui-base 外无依赖),保持 workspace 默认构建轻量。
Linux 上链接 WebKitGTK(webkit2gtk-4.1)+ GTK 3(需系统安装,与其他原生窗口后端的 GTK/X11 依赖同理)。
模块
node—— 递归A2uiNode组件,逐节点匹配 A2UI 组件种类渲染成 HTML(对应 iced 的walker+components)。app——Gallery根组件(无 prop,从 context 读状态):侧边栏 + 预览面板 + Modal 覆盖层 + Button 激活流程(对应IcedApp)。theme—— 整套深色 Catppuccin-Mocha + 绿色主调 CSS(对应 iced 的style)。
License
MIT