帶有 action 的 SnackBar 不再自動關閉
帶有 action 按鈕的 SnackBar 現在預設不會自動關閉,除非使用者手動關閉。
摘要
#
SnackBar 帶有 action 的預設行為已經變更。
先前,帶有 action 的 SnackBar 如果啟用了 talkback,則不會自動關閉。
現在,所有帶有 action 的 SnackBar 元件 (Widget) 預設都會處於不可自動關閉的狀態,直到使用者與 action 按鈕互動為止。
背景
#
帶有 action 按鈕的 SnackBar 現在被視為需要使用者互動的較持久通知。
這項變更提升了無障礙性與使用者體驗,確保重要通知會一直顯示在螢幕上,直到被確認為止。
變更說明
#這項變更與 Material 3 設計規範中的 SnackBar 元件行為一致:
- 舊行為:帶有 action 按鈕的
SnackBar會在一段時間後自動關閉,除非啟用了 talkback。 - 新行為:帶有 action 按鈕的
SnackBar不會自動關閉;它會一直顯示在螢幕上,直到使用者手動關閉。
為了覆寫這個行為,SnackBar 新增了一個可選的 persist 屬性。
當 persist 為 true 時,SnackBar 不會自動關閉,並會一直顯示在螢幕上,直到使用者手動關閉。
當為 false 時,SnackBar 會在標準顯示時間後自動關閉,不論是否有 action。
若為 null,SnackBar 則會遵循預設行為——即帶有 action 時不會自動關閉。
遷移指南
#若要恢復舊有帶有 action 的 SnackBar 自動關閉行為,請將 persist 設為 false。
遷移前的程式碼:
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: const Text('This is a snackbar with an action.'),
action: SnackBarAction(
label: 'Action',
onPressed: () {
// Perform some action
},
),
),
);
遷移後的程式碼:
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
},
),
),
);
時程
#納入版本:3.37.0-0.0.pre 穩定版本釋出:3.38
參考資料
#API 文件:
相關 PR:
Unless stated otherwise, the documentation on this site reflects Flutter 3.44.0. Page last updated on 2026-06-14. View source or report an issue.