概述
发布原生桌面小组件快照。
发布快照
从 supernode/widget 导入 widget 和小组件组件,按 View 配置 JSX。
import { Column, DateText, Modifier, Text, widget } from "supernode/widget";
await widget.show({
views: (
<Column spacing={8} modifier={Modifier.padding(16)}>
<Text fontSize={20} fontWeight="bold">SuperNode</Text>
<Text>{widget.inputValue ?? "欢迎"}</Text>
<DateText date={new Date()} format="time" prefix="更新于 " />
</Column>
),
options: { refresh: new Date(Date.now() + 30 * 60 * 1000) },
});widget.show({ views, options? }): Promise<void> 对 ViewChild 执行一次渲染并校验,将视图树发送至 Android,宿主接受后返回,脚本随后可以结束。函数组件会作为纯函数被直接调用。Hooks、交互式状态更新和 TextField 输入请使用 App。
小组件由 Glance 渲染,因此 supernode/widget 只提供 Glance 能如实渲染的能力。可用的能力见组件和 Modifier,与 App 页面的对比见 View。
上下文
| 属性 | 值 |
|---|---|
widget.family | small、medium、large 或 extraLarge。 |
widget.displaySize | { width, height },单位为 dp。 |
widget.inputValue | 可选的配置字符串。 |
options.refresh | 可选的 Date,用于请求下一次刷新。 |
宿主在执行已配置的小组件时注入上下文。普通脚本的默认值为 small、158 × 158,输入值为 undefined。刷新由 Android 调度,具体时机可能受到系统限制而延后。传入无效的刷新日期会抛出异常。
校验与报错
不支持的 props 在类型检查阶段就会报错。widget.show() 在调用宿主前还会再次校验视图树,并给出出错视图的路径,例如混入了从 supernode/app 导入的视图:
widget.show(): Column > TextField[0]: TextField is an app-only view; import widget views from "supernode/widget"同样的校验也会拒绝子节点超过 10 个的容器,以及在一条修饰符链上重复设置的属性。在小组件视图中调用 Hook 或读取 Context 会抛出异常。
执行方式
从 Android 桌面添加 SuperNode 小组件并选择项目。宿主依次选择 widget:render、widget、start 项目脚本,随后尝试项目入口文件。每次执行会获得私有 token,将输出路由到对应的小组件实例;SDK 自动传递该 token。
普通 SuperNode 脚本调用 widget.show 只校验视图树并返回成功,不会发布,可用于在终端中检查小组件。渲染失败时捕获 Promise 异常并检查执行日志。