Desaprobar ButtonBar en favor de OverflowBar
El widget ButtonBar ha sido reemplazado por un widget más eficiente, OverflowBar.
Resumen
#El widget ButtonBar fue deprecado en favor del widget
OverflowBar, que es más eficiente.
Como resultado, ThemeData.buttonBarTheme y
ButtonBarTheme también fueron deprecados.
Contexto
#El widget ButtonBar organiza a sus hijos en una fila y
en una columna si no hay suficiente espacio horizontal.
El widget OverflowBar hace lo mismo, pero no está
vinculado a la librería Material y forma parte de la librería principal widgets.dart.
Descripción del cambio
#- Reemplaza el widget
ButtonBarpor el widgetOverflowBar. - De forma predeterminada,
ButtonBaralinea a sus hijos al final del diseño, mientras queOverflowBaralinea a sus hijos al inicio. Para alinear a los hijos deOverflowBaral final, establece la propiedadOverflowBar.alignmentenMainAxisAlignment.end. ButtonBar.buttonPaddingproporciona espaciado entre los botones y relleno alrededor de ellos. Reemplázalo conOverflowBar.spacing, que proporciona espaciado entre los botones. Envuelve el widgetOverflowBarcon el widgetPaddingpara proporcionar relleno alrededor de los botones.- Reemplaza
ButtonBar.overflowButtonSpacingconOverflowBar.overflowSpacing, el cual proporciona espaciado entre los botones cuando estos se disponen en una columna porque no hay suficiente espacio horizontal. - Si está especificado, elimina
ButtonBarThemeDatadeThemeData.
Guía de migración
#Reemplaza ButtonBar con OverflowBar, anula la alineación predeterminada si
es necesario, reemplaza ButtonBar.buttonPadding con el widget Padding y
OverflowBar.spacing para el espaciado entre y alrededor de los botones, y reemplaza
ButtonBar.overflowButtonSpacing con OverflowBar.overflowSpacing
para el
espaciado entre los botones cuando se disponen en una columna si no hay
suficiente espacio horizontal.
Antes:
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: () {}),
],
),
Después:
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: () {}),
],
),
),
Si especificas un ThemeData.buttonBarTheme, elimínalo y
utiliza las propiedades del widget OverflowBar para personalizar el widget OverflowBar.
Antes:
ThemeData(
buttonBarTheme: ButtonBarThemeData(
alignment: MainAxisAlignment.center,
),
),
Después:
ThemeData(
// ...
),
Si utilizas el widget ButtonBarTheme, elimínalo y
utiliza las propiedades del widget OverflowBar para personalizar el widget OverflowBar.
Antes:
ButtonBarTheme(
data: ButtonBarThemeData(
alignment: MainAxisAlignment.center,
),
child: ButtonBar(
children: <Widget>[
// ...
],
),
),
Después:
OverflowBar(
alignment: MainAxisAlignment.center,
children: <Widget>[
// ...
],
),
Timeline
#Introducido en la versión: 3.22.0-2.0.pre
En la versión estable: 3.24.0
Referencias
#Documentación de la API:
Issues relevantes:
PRs relevantes:
A menos que se indique lo contrario, la documentación de este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 2026-05-05. Ver código fuente oreportar un problema.