Flutter: Material — Widget AppBar

2025-03-13T20:00:00-05:00 | 4 minutos de lectura | Actualizado en 2025-03-13T20:46:20-05:00

jaimetellezb
Flutter: Material — Widget AppBar

🚀 Uso de AppBar en Flutter.

Tabla de Contenido

Introducción

El widget de AppBar es un widget que gestiona toda la parte superior de la pantalla del dispositivo, también conocido como Top.

Widget AppBar

El AppBar es un widget que nos permite tener acciones rápidas en la parte superior izquierda, como búsquedas, notificaciones y cualquier otro tipo de acción que nos permita actuar sobre el screen actual.

Propiedades

A continuación, nombraremos las propiedades del widget más utilizadas:

appbar1

  • leading propiedad de tipo Widget, que se muestra en la parte superior izquierda en la barra de herramientas, antes del título title. Por lo general, se utiliza el widget IconButton.
  • title propiedad de tipo Widget, es el widget primario de la barra de herramientas y va en la parte media de la misma. Se utiliza el widget Text.
  • actions propiedad de tipo List<Widget>, es una lista de widgets que van en la parte superior derecha de la barra de herramientas, después del título. Por lo general son IconButton los que se utilizan allí.
  • flexibleSpace este widget está detrás de la barra de herramientas (AppBar) y de la barra de pestañas o tabs (TabBar) y ocupa el mismo tamaño de ambas.
  • bottom propiedad de tipo Widget, se usa especialmente para el widget TabBar, que tiene una lista de children tipo Tab.

Acá se encuentran el resto de propiedades que tenemos a disposición con este widget, para más detalle podemos buscar la documentación oficial .

  • actionsIconTheme propiedad para modificar las propiedades o estilo de actions.
  • actionsPadding propiedad para modificar el padding de actions.
  • backgroundColor propiedad para modificar el color de fondo.
  • bottomOpacity propiedad para cambiar la opacidad de bottom.
  • centerTitle propiedad centrar el título title en la barra de herramientas.
  • elevation propiedad para mostrar la elevación del app bar respecto a los demás widgets.
  • foregroundColor propiedad para definir el color de fondo.
  • iconTheme propiedad para definir el estilo de los íconos del app bar.
  • leadingWidth propiedad para definir el ancho del leading.
  • shadowColor es el color de la sombra que queda debajo del app bar.
  • shape es la forma que se le quiere dar al app bar.
  • titleSpacing propiedad para modificar el espacio horizontal del título title.
  • titleTextStyle es el estilo del texto que se coloca en el title.

Hay otras propiedades, pero estas son las más utilizadas para el widget de AppBar.

Ejemplo de AppBar

// Se crea screen para widget app-bar
import 'package:flutter/material.dart';

class AppBarScreen extends StatefulWidget {
  const AppBarScreen({super.key});

  @override
  State<AppBarScreen> createState() => _AppBarScreenState();
}

class _AppBarScreenState extends State<AppBarScreen> {
  bool _appBarOption = true;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _appBarOption ? AppBarWidget(context) : TabBarWidget(context),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            _appBarOption = !_appBarOption;
          });
        },
        child: const Icon(Icons.change_circle_outlined),
      ),
    );
  }
}

class AppBarWidget extends StatefulWidget {
  const AppBarWidget(BuildContext context, {super.key});

  @override
  State<AppBarWidget> createState() => _AppBarWidgetState();
}

class _AppBarWidgetState extends State<AppBarWidget> {
  bool _showPlayIcon = true;
  bool _showNotificationIcon = false;
  String _data = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('AppBar Screen'),
        actions: [
          _showPlayIcon
              ? buildPlayPauseButton(
                  text: 'Play selected',
                  icon: Icons.play_arrow,
                )
              : buildPlayPauseButton(
                  text: 'Pause selected',
                  icon: Icons.pause,
                ),
          _showNotificationIcon
              ? buildNotificationButton(
                  text: 'Disabled notifications',
                  icon: Icons.notifications,
                )
              : buildNotificationButton(
                  text: 'Enabled notifications',
                  icon: Icons.notifications_outlined,
                ),
          PopupMenuButton<String>(
            onSelected: (value) {
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('Tap: $value')),
              );
            },
            itemBuilder: (BuildContext context) {
              return {'Profile', 'Settings', 'Logout'}.map((String choice) {
                return PopupMenuItem<String>(
                  value: choice,
                  child: Text(choice),
                );
              }).toList();
            },
          ),
        ],
        elevation: 5,
        shadowColor: Theme.of(context).shadowColor,
      ),
      body: Center(
        child: Text(_data),
      ),
    );
  }

  IconButtonWidget buildNotificationButton(
      {required String text, required IconData icon}) {
    return IconButtonWidget(
      icon: icon,
      text: text,
      onPressed: () {
        setState(() {
          _showNotificationIcon = !_showNotificationIcon;
          _data = text;
        });
      },
    );
  }

  IconButtonWidget buildPlayPauseButton(
      {required String text, required IconData icon}) {
    return IconButtonWidget(
      icon: icon,
      text: text,
      onPressed: () {
        setState(() {
          _showPlayIcon = !_showPlayIcon;
          _data = text;
        });
      },
    );
  }
}

class IconButtonWidget extends StatelessWidget {
  const IconButtonWidget(
      {super.key,
      required this.icon,
      required this.text,
      required this.onPressed});

  final IconData icon;
  final String text;
  final void Function() onPressed;

  @override
  Widget build(BuildContext context) {
    return IconButton(
      icon: Icon(icon),
      tooltip: text,
      onPressed: onPressed,
    );
  }
}

class TabBarWidget extends StatelessWidget {
  const TabBarWidget(BuildContext context, {super.key});

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      initialIndex: 0,
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          title: const Text('TabBar Screen'),
          bottom: const TabBar(
            tabs: [
              Tab(
                icon: Icon(Icons.home_outlined),
                text: 'News',
              ),
              Tab(
                icon: Icon(Icons.bar_chart_outlined),
                text: 'Charts',
              ),
              Tab(
                icon: Icon(Icons.account_circle_outlined),
                text: 'Accounts',
              ),
            ],
          ),
        ),
        body: const TabBarView(children: [
          Center(
            child: Text('Home selected'),
          ),
          Center(
            child: Text('Charts selected'),
          ),
          Center(
            child: Text('Account selected'),
          ),
        ]),
      ),
    );
  }
}

appbar


Conclusión

En conclusión, el widget AppBar nos da diferentes opciones para modificar la barra de herramientas o la parte superior de la pantalla y personalizarla de acuerdo a lo que necesitamos en nuestra app.

¡Gracias por leer!

https://buymeacoffee.com/jaimetellezb

Referencias

© 2022 - 2025 jaimetellezb - Compartir guías y tutoriales de programación.

🌱 Powered by Hugo with theme Dream.

Sobre mí

alt

Ingeniero de software

Hola, bienvenidos a mi blog sobre guías y tutoriales de programación.

Aquí podrás encontrar guías y tutoriales sobre algunos temas de tecnología en general. La idea es poder ayudar a que ciertas cosas como configuraciones de nuevas herramientas sean más fáciles de abordar y utilizar. También pequeños proyectos donde se usen diferentes tecnologías como ejemplo.

Enlaces sociales