Skip to main content
Surfaces 让你的扩展在不替换内置组件的情况下,向 Aether 界面的预定义位置添加 UI。每次 surface 注册会定位到一个命名插槽,并贡献一棵声明式 UI 树,Aether 会在该位置与其他已注册内容一并渲染。

API 签名

registerSurface 返回一个清理函数。调用它可移除 surface 注册并触发重新渲染。

可用插槽

抽屉插槽与渲染顺序

drawer.headerdrawer.footer 插槽在对话列表滚动时保持固定。 传统 drawer 插槽仍然支持,并按以下顺序在对话列表末尾渲染:
  1. drawer
  2. drawer.list.end
  3. 内置扩展页面启动入口

Drawer opened 事件

监听 drawer.opened 事件可在对话抽屉打开时触发扩展逻辑:
在移动端,drawer.opened 在每次由关到开的过渡(包括滑动手势)时触发一次。在平板端,当固定抽屉首次进入组合时触发一次(稳定的重组合不会重复触发)。

SurfaceDefinition 字段

string
此 surface 注册的唯一标识符。Aether 用它跟踪并去重同一扩展的注册。若省略,Aether 会根据插槽与注册顺序生成一个。
number
多个扩展注册同一插槽时控制渲染顺序。数值越小越先渲染。省略时默认为 0
function
工厂函数,接收渲染上下文并返回 ui 节点树。可为同步或 async。请使用 rendertree 之一。
object
省略 render 时使用的静态 ui 节点树。

渲染上下文

每次渲染周期,Aether 会向你的 render 函数传入包括下列字段在内的上下文:

示例

index.ts
调用 aether.invalidate() 可在扩展内部状态变化时强制重新渲染所有 surfaces。Aether 不会在任意扩展侧变更时自动重渲染 surfaces — 仅在存储写入、action 调用与显式 invalidation 时重渲染。
使用 order 确保多个扩展贡献同一插槽时,你的 surface 渲染在正确位置。相同 order 值的注册会按作用域 ID 稳定排序作为决胜规则。