跳至主要內容

棄用 `ButtonBar`,改用 `OverflowBar`

摘要

#

ButtonBar 小部件已被棄用,改用更有效率的 OverflowBar 小部件。因此,ThemeData.buttonBarThemeButtonBarTheme 也被棄用。

背景

#

ButtonBar 小部件會在水平空間足夠時將其子項排列成一行,若空間不足則排列成一列。OverflowBar 小部件也會執行相同的操作,但它不屬於 Material 函式庫,而是核心 widgets.dart 函式庫的一部分。

變更說明

#
  • ButtonBar 小部件替換為 OverflowBar 小部件。
  • 預設情況下,ButtonBar 將其子項對齊到版面的末端,而 OverflowBar 則將其子項對齊到起始端。若要將 OverflowBar 的子項對齊到末端,請將 OverflowBar.alignment 屬性設定為 MainAxisAlignment.end
  • ButtonBar.buttonPadding 提供按鈕之間的間距以及按鈕周圍的邊距。請將其替換為 OverflowBar.spacing,它提供按鈕之間的間距。使用 Padding 小部件包覆 OverflowBar 小部件,以提供按鈕周圍的邊距。
  • ButtonBar.overflowButtonSpacing 替換為 OverflowBar.overflowSpacing,它提供當按鈕因水平空間不足而排列成一列時,按鈕之間的間距。
  • 如果已指定,請從 ThemeData 中移除 ButtonBarThemeData

遷移指南

#

ButtonBar 替換為 OverflowBar,如有必要,覆寫預設對齊方式,將 ButtonBar.buttonPadding 替換為 Padding 小部件和 OverflowBar.spacing 來設定按鈕之間和周圍的間距,並將 ButtonBar.overflowButtonSpacing 替換為 OverflowBar.overflowSpacing,來設定按鈕因水平空間不足而排列成一列時按鈕之間的間距。

之前

dart
ButtonBar(
  buttonPadding: const EdgeInsets.all(8.0),
  overflowButtonSpacing: 8.0,
  children: <Widget>[
    TextButton(child: const Text('Button 1'), onPressed: () {}),
    TextButton(child: const Text('Button 2'), onPressed: () {}),
    TextButton(child: const Text('Button 3'), onPressed: () {}),
  ],
),

之後

dart
Padding(
  padding: const EdgeInsets.all(8.0),
  child: OverflowBar(
    alignment: MainAxisAlignment.end,
    spacing: 8.0,
    overflowSpacing: 8.0,
    children: <Widget>[
      TextButton(child: const Text('Button 1'), onPressed: () {}),
      TextButton(child: const Text('Button 2'), onPressed: () {}),
      TextButton(child: const Text('Button 3'), onPressed: () {}),
    ],
  ),
),

如果您指定了 ThemeData.buttonBarTheme,請將其移除,並使用 OverflowBar 小部件的屬性來自訂 OverflowBar 小部件。

之前

dart
ThemeData(
  buttonBarTheme: ButtonBarThemeData(
    alignment: MainAxisAlignment.center,
  ),
),

之後

dart
ThemeData(
  // ...
),

如果您使用了 ButtonBarTheme 小部件,請將其移除,並使用 OverflowBar 小部件的屬性來自訂 OverflowBar 小部件。

之前

dart
ButtonBarTheme(
  data: ButtonBarThemeData(
    alignment: MainAxisAlignment.center,
  ),
  child: ButtonBar(
    children: <Widget>[
      // ...
    ],
  ),
),

之後

dart
OverflowBar(
  alignment: MainAxisAlignment.center,
  children: <Widget>[
    // ...
  ],
),

時程

#

已於版本中推出:3.22.0-2.0.pre
穩定版發行:3.24.0

參考資料

#

API 文件

相關問題

相關 PR