Flutter: Material - Widget ListTile

2025-01-11T12:00:00-05:00 | 4 minutos de lectura | Actualizado en 2025-01-24T07:42:46-05:00

jaimetellezb
Flutter: Material - Widget ListTile

🚀 Más widgets de Material 3 para explorar. 👋

Tabla de Contenido

Introducción


🚀 Seguimos con widgets de Material, en este caso conoceremos un poco sobre el widget ListTile.


ListTile

El widget ListTile hace referencia a listas horizontales que pueden tener texto, íconos e imágenes. Contiene tres filas o espacios verticales dentro de la columna donde pueden ir íconos u otros widgets. además, tiene tres tamaños: una línea, dos líneas o tres líneas.

Propiedades

  • title propiedad con el contenido principal del widget.
  • leading propiedad donde se puede colocar contenido antes del title, como por ejemplo: íconos.
  • subtitle propiedad con contenido adicional que se muestra debajo del title.
  • trailing propiedad para colocar un widget a la derecha del title.
  • dense propiedad para hacer más pequeño / grande el widget.
  • visualDensity propiedad para definir espacios entre los widgets.
  • shape propiedad para definir la forma del widget.
  • style fuente utilizada para el title.
  • selectedColor color cuando se selecciona un elemento de la lista.
  • iconColor color predeterminado para los íconos que se colocan en las propiedades leading y trailing.
  • textColor color de texto para las propiedades title y subtitle, además leading y trailing.
  • titleTextStyle estilo de texto para la propiedad title.
  • subtitleTextStyle estilo de texto para la propiedad subtitle.
  • leadingAndTrailingTextStyle estilo de texto para las propiedades leading y trailing.
  • contentPadding propiedad para colocar relleno entre el widget y su widget padre.
  • enabled propiedad para habilitar / deshabilitar el widget.
  • onTap función que se ejecuta cuando el usuario toca el widget dentro de la lista. Allí se puede determinar qué se quiere hacer en estos casos, como mostrar un mensaje, llamar una API, etc.
  • onLongPress función que se llama cuando el usuario deja presionado el widget.
  • onFocusChange controlador que se llama cuando cambia el foco.
  • selected si es true y enabled = true todo el contenido queda con el mismo color.
  • focusColor color cuando está el foco sobre el widget.
  • hoverColor el color del widget cuando se sitúa sobre él.
  • splashColor color cuando se presiona el widget.
  • tileColor color cuando no se está presionando el widget.
  • selectedTileColor color cuando la selección del widget es true. Es lo mismo que selected = true.
  • horizontalTitleGap el espacio entre title y los widgets leading y trailing.
  • minVerticalPadding el relleno mínimo entre la parte superior o inferior respecto al title y subtitle.
  • minLeadingWidth ancho mínimo para el leading.
  • minTileHeight alto mínimo para el widget.
  • titleAlignment define como se alinean leading y trailing verticalmente respecto a title y subtitle.

Casos de uso

  • Se recomienda utilizar para seleccionar varios elementos dentro de un listado.
  • Se utilizan normalmente dentro de ListView o también pueden ir dentro de Cards, Columns y Drawers.

Ejemplo

import 'package:flutter/material.dart';

/// Clase Screen para widget listTile
class ListTileScreen extends StatelessWidget {
  const ListTileScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Listtile Screen'),
      ),
      body: ListView(
        shrinkWrap: true,
        children: [
          ListTile(
            title: const Text('Contenido principal'),
            subtitle: const Text('Contenido secundario'),
            leading: const Icon(Icons.circle),
            trailing: const Icon(Icons.more_vert),
            shape: const CircleBorder(),
            iconColor: Colors.green,
            textColor: Colors.black54,
            titleTextStyle:
                const TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
            subtitleTextStyle: const TextStyle(fontStyle: FontStyle.italic),
            contentPadding: const EdgeInsets.all(10),
            onTap: () {
              ScaffoldMessenger.of(context).showSnackBar(
                const SnackBar(
                  content: Text('Acción al ejecutar onTap'),
                ),
              );
            },
            onLongPress: () {
              ScaffoldMessenger.of(context).showSnackBar(
                const SnackBar(
                  content:
                      Text('Acción al dejar presionado el widget onLongPress'),
                ),
              );
            },
            splashColor: Colors.amber,
          ),
          const ListTile(
            title: Text('Contenido deshabilitado'),
            subtitle: Text('Contenido secundario'),
            leading: Icon(Icons.circle),
            trailing: Icon(Icons.more_vert),
            enabled: false,
          ),
          const ListTile(
            title: Text('Contenido principal'),
            subtitle: Text('Contenido secundario'),
            leading: Icon(Icons.circle),
            trailing: Icon(Icons.more_vert),
            selected: true,
          ),
          const ListTile(
            iconColor: Colors.red,
            title: Text('Contenido principal'),
            subtitle: Text('Contenido secundario'),
            leading: Icon(Icons.circle),
            trailing: Icon(Icons.more_vert),
            titleAlignment: ListTileTitleAlignment.top,
          ),
          const Card(
            child: ListTile(
              title: Text('Título dentro de una Card'),
            ),
          ),
          const Card(
            child: ListTile(
              title: Text('Título dentro de una Card'),
              subtitle: Text('subtítulo dentro de una card'),
            ),
          ),
          const Card(
            child: ListTile(
              leading: CircleAvatar(
                child: Text('1'),
              ),
              title: Text('Título dentro de una Card'),
              subtitle: Text('title - subtitle - leading'),
            ),
          ),
          const Card(
            child: ListTile(
              leading: CircleAvatar(
                child: Text('2'),
              ),
              title: Text('Título dentro de una Card'),
              subtitle: Text('title - subtitle - leading - trailing'),
              trailing: Icon(Icons.arrow_circle_right),
            ),
          ),
          const SizedBox(
            height: 100,
          )
        ],
      ),
    );
  }
}

demo

Consideraciones

  • Utilizar ListTile para mostrar listados en orden alfabético.
  • Se recomienda utilizar para seleccionar varios elementos dentro de un listado.

Conclusión

En conclusión, el ListTile es una muy buena opción para los listados donde queremos que hayan acciones secundarias que nos permitan accionar sobre cada uno de los elementos.

¡Gracias por leer!

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