带操作的SnackBar不再自动消失
概述
#带操作的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