概述

#

帶操作的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