Skip to content

提示条 ​

c.Toast 在窗口底部附近显示一条消息几秒钟,用于告知用户刚刚操作的结果:

go
if ui.Button(c, "Save").Clicked() {
	app.save()
	c.Toast("Saved")
}

c.ToastAction 显示带按钮的提示条,例如删除后的"撤销",停留时间更长: 按钮会执行操作(与视图一样在主线程上运行)并关闭提示条;Tab 可以聚焦到 它。

go
app.trash(note)
c.ToastAction("Note deleted", "Undo", func() { app.restore(note) })

已在显示的消息会重新显示;其他提示条在其上方堆叠,最新三条可见,更早的 在隐藏中等待,其计时继续流逝。当指针停留在提示条上、键盘焦点位于其中、 或窗口处于后台时,提示条的计时会暂停。Escape 会关闭焦点所在的提示条。 提示条以淡入淡出方式出现和消失。

提示条使用主题的 Inverse 和 InverseText 颜色,即文字与背景反转配色, 除非主题另有设置(参见主题)。

添加与关闭提示条 ​

c.AddToast 显示一个 ui.Toast,如同 Base UI 的 toast 管理器添加提示条 一样,并返回其 ID;c.Toast 和 c.ToastAction 相当于以消息同时作为 ID 和标题调用 AddToast:

go
id := c.AddToast(ui.Toast{
	Title:       "Uploading",
	Description: "report.pdf",
	Timeout:     -1, // 直到被关闭
})
// ...
c.CloseToast(id)
字段作用
ID为提示条命名:添加一个 ID 与正在显示的提示条相同的提示条时,会修改那个提示条并使其重新显示;为空时会自动生成一个
Title、Description提示条显示的内容,屏幕阅读器会在其出现时朗读
Type提示条的类型,例如 "error",以便外观加以区分
Timeout显示时长:为零时 4 秒,为负时直到被关闭
Action、OnAction一个按钮,执行 OnAction 并关闭提示条
OnClose关闭时执行:计时结束,或由用户、其操作按钮或 CloseToast 关闭
Data外观所需的其他数据

c.CloseToast("") 会关闭所有提示条。

不带外观 ​

ToastViewportBase 用自己的外观而非主题的外观来构建窗口的提示条,如同 Base UI 的 Toast 组件:fn 为视口设置样式——一个覆盖窗口、指针可穿透的 纵向容器,把提示条放在其底部(可用 Justify 和 AlignItems 移动它们), 并用 ToastBase 构建每个正在显示的提示条;辅助技术把其 Root 视为一个 状态(status),其 ActionButton 和 CloseButton 分别执行操作和关闭提示 条。在视图中调用一次即可,位置不限。把提示条放在右下角:

go
ui.ToastViewportBase(c, func(viewport ui.Element, toasts []ui.Toast) {
	viewport.Padding(16).AlignItems(ui.End).Gap(8)
	for _, t := range toasts {
		toast := ui.ToastBase(c, t)
		toast.Root.Row().Gap(12).Padding(10, 14).Radius(8).Background(surface).Border(1, border)
		toast.Root.Transition(ui.ElementTransition{Enter: &ui.Motion{Y: 8}, Exit: &ui.Motion{}})
		toast.Root.Children(func() {
			if t.Type == "error" {
				ui.Icon(c, alert).TextColor(danger)
			}
			ui.Text(c, t.Title).Grow(1)
			if t.Action != "" {
				toast.ActionButton().Children(func() { ui.Text(c, t.Action) })
			}
			toast.CloseButton().Label("Close").Children(func() { ui.Icon(c, x) })
		})
	}
})

toasts 是正在显示的提示条,最新的三条,按从旧到新的顺序排列。 toast.Left() 表示某条提示条还要显示多久,用于倒计时;对于显示直到被 关闭的提示条,其值为 0。计时与暂停行为与主题外观相同。即使没有提示条 显示,视口也会保留,以便最后一条完成其退场过渡。

无障碍 ​

提示条出现时,屏幕阅读器会朗读其标题和描述(参见播报); 辅助技术将其视为一个状态(status),其中包含其按钮。