概述

#

带操作的SnackBar的默认行为已发生改变。之前,带操作的SnackBar如果启用了talkback,则不会自动消失。现在,所有带操作的SnackBar默认都处于不可消失状态,直到用户与操作按钮进行交互。

背景

#

带操作按钮的SnackBar现在被视为需要用户交互的更持久的通知。此更改通过确保关键通知保留在屏幕上直到被用户确认,从而改善了可访问性和用户体验。

变更说明

#

此更改符合Material 3关于SnackBar的设计规范。

  • 旧行为:带操作按钮的SnackBar会在持续一段时间后自动消失,除非启用了talkback。
  • 新行为:带操作按钮的SnackBar不会自动消失;它会一直保留在屏幕上,直到用户手动将其关闭。

要覆盖此行为,已为SnackBar添加了一个可选的persist属性。当persist为true时,SnackBar不会自动消失
并会一直保留在屏幕上,直到用户手动将其关闭。当persist为false时,SnackBar将在其标准持续时间后自动消失,无论是否存在操作。当persist为null时,SnackBar将遵循默认行为,即如果存在操作,则不会自动消失。

迁移指南

#

要为带操作的SnackBar恢复旧的自动消失行为,请将persist设置为false。

迁移前的代码

dart
ScaffoldMessenger.of(context).showSnackBar(
  SnackBar(
    content: const Text('This is a snackbar with an action.'),
    action: SnackBarAction(
      label: 'Action',
      onPressed: () {
        // Perform some action
      },
    ),
  ),
);

迁移后的代码

dart
ScaffoldMessenger.of(context).showSnackBar(
  SnackBar(
    content: const Text('This is a snackbar with an action.'),
    persist: false, // Add this line to restore auto-dismiss behavior
    action: SnackBarAction(
      label: 'Action',
      onPressed: () {
        // Perform some action
      },
    ),
  ),
);

时间线

#

已登陆版本:TBD 稳定版发布:TBD

参考资料

#

API 文档

相关 PR