概述

#

ButtonBar 小部件已被弃用,取而代之的是更高效的 OverflowBar 小部件。因此,ThemeData.buttonBarThemeButtonBarTheme 也已被弃用。

背景

#

ButtonBar 小部件将子项排成一行,如果水平空间不足,则排成一列。OverflowBar 小部件执行相同的操作,但它不与 Material 库绑定,而是 widgets.dart 核心库的一部分。

变更说明

#
  • ButtonBar 小部件替换为 OverflowBar 小部件。
  • 默认情况下,ButtonBar 将其子项对齐到布局的末尾,而 OverflowBar 将其子项对齐到开头。要将 OverflowBar 的子项对齐到末尾,请将 OverflowBar.alignment 属性设置为 MainAxisAlignment.end
  • ButtonBar.buttonPadding 在按钮之间提供间距,并在按钮周围提供填充。将其替换为 OverflowBar.spacing,它在按钮之间提供间距。将 OverflowBar 小部件包装在 Padding 小部件中,以在按钮周围提供填充。
  • 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