Skip to content

Alert — 内联提示条 ​

页面内的一块提示(成功 / 错误 / 警告 / 信息)。不是 toast —— 它占位置、留在原地。

基本用法 ​

kotlin
Alert(text = "已保存到本地", type = AlertType.SUCCESS)

Alert(
    title = "强制更新",
    text = "本次为强制更新,不更新将无法使用",
    type = AlertType.WARNING,
)

Alert(text = "网络连接失败,请检查网络后重试", type = AlertType.ERROR)

换图标:

kotlin
Alert(text = "已同步", type = AlertType.SUCCESS, icon = Phosphor.CloudCheck)

参数 ​

参数类型默认值说明
modifierModifierModifier修饰符。内部会 fillMaxWidth()
textString—提示正文
typeAlertTypeAlertType.WARNING语义类型。默认是警告,不是信息
iconImageVector?null自定义图标;null 时用类型自带的(20dp)
titleString?null可选标题。传了才多一行
colorsAlertColorsAlertDefaults.colors()九槽位配色

AlertType 与默认图标 ​

值默认图标用在哪
SUCCESSPhosphor.CheckCircle操作成功
ERRORPhosphor.XCircle失败、异常
WARNINGPhosphor.Warning有代价的操作、强制更新
INFOPhosphor.Info中性说明

AlertColors ​

字段默认值
successContainerMaterialTheme.colorScheme.primaryContainer
successContentMaterialTheme.colorScheme.onPrimaryContainer
errorContainerMaterialTheme.colorScheme.errorContainer
errorContentMaterialTheme.colorScheme.onErrorContainer
warningContainerMaterialTheme.colorScheme.tertiaryContainer
warningContentMaterialTheme.colorScheme.onTertiaryContainer
infoContainerMaterialTheme.colorScheme.surfaceContainerHighest
infoContentMaterialTheme.colorScheme.onSurface
infoBorderColorMaterialTheme.colorScheme.outlineVariant

要点 ​

  • type 默认是 WARNING。 想要普通提示得显式传 AlertType.INFO —— 不传就得到一条琥珀色警告条。
  • title 会连带把正文降一档字号。 有标题时标题用 titleSmall、正文用 bodySmall;没标题时正文用 bodyMedium。两行结构自动成立,不用自己调字号。
  • INFO 是唯一带描边的。 它用的是中性灰容器,压在同样灰的底上会「消失」,所以要补一圈 1.dp 边框把它框出来。三种彩色容器自带辨识度,不需要。
  • 它是「留在原地」的提示条,不是浮层。 需要自动消失的用 toast / popup 那类;需要用户做决定的用对话框。Alert 用在表单校验失败、权限说明、设置项下方的解释这类长期可见的位置。
  • 别自己给容器色。 九槽位配色已经跟 colorScheme 挂钩,换配色方案、切对比度档、动态取色时会自动跟着变。

说明 ​

  • 四种状态各自对应一个 M3 颜色槽位:SUCCESS → primaryContainer、ERROR → errorContainer、WARNING → tertiaryContainer、INFO → surfaceContainerHighest + 描边。容器色 + on* 前景色成对取用,深浅主题下都自动成立,本文件不留任何字面量色值。
  • 为什么 SUCCESS 借用主色容器:M3 的 45 个槽位里只有 error 自带语义,success / warning 没有对应槽位。补齐有两条路 —— 一是再维护一套「扩展配色」(明暗各一份 + CompositionLocal 转发 + 页面级读取入口),二是借用语义最接近的槽位。这里走第二条:状态色不属于配色方案,为它撑起第二套主题系统不划算。
  • 语义修正是有来由的:原先 SUCCESS 用的是 colorScheme.primary —— 也就是「成功」和「品牌主色」是同一个颜色,同时 WARNING 又用 onSurfaceVariant(灰)。结果是成功提示看起来像普通强调,而「成功」和「警告」在视觉上根本分不出来。现在四项分开,各自可辨。