Tutorial completo uso de ion-list y ion-list-header personalizado y dinámico

Introducción

En este tutorial, profundizaremos en el uso del componente ion-list y ion-list-header en Ionic, explorando múltiples escenarios, personalizaciones y diversas formas de interactuar con estos componentes. Además, aplicaremos diferentes técnicas de estilización con CSS para lograr un diseño atractivo que funcione bien en todas las plataformas compatibles con Ionic.

Objetivos del tutorial:

  1. Comprender cómo funcionan los componentes ion-list e ion-list-header en Ionic.
  2. Aplicar personalizaciones avanzadas con CSS, incluyendo degradados de colores y adaptaciones para diferentes dispositivos.
  3. Crear listas dinámicas y personalizables.
  4. Implementar interacciones avanzadas, como deslizamiento para eliminar ítems, selección múltiple, y reordenamiento de elementos.

Paso 1: Crear un proyecto de Ionic desde cero

Empecemos creando un nuevo proyecto de Ionic en blanco.

Abre una terminal y ejecuta el siguiente comando:

ionic start ListaAvanzada blank --type=angular

Una vez creado el proyecto, navega a la carpeta:

cd ListaAvanzada

Paso 2: Agregar ion-list e ion-list-header básicos

Vamos a construir una estructura de lista simple. Abre el archivo src/app/home/home.page.html y reemplaza el contenido con el siguiente código:

<ion-header>
  <ion-toolbar>
    <ion-title>Listas Avanzadas</ion-title>
  </ion-toolbar>
</ion-header>

<ion-content>
  <!-- Lista principal -->
  <ion-list>
    <ion-list-header>
      Opciones del Menú
    </ion-list-header>

    <!-- Ítems de la lista -->
    <ion-item>
      <ion-label>Perfil</ion-label>
    </ion-item>

    <ion-item>
      <ion-label>Ajustes</ion-label>
    </ion-item>

    <ion-item>
      <ion-label>Notificaciones</ion-label>
    </ion-item>
  </ion-list>
</ion-content>

Explicación:

  • ion-list-header: Define el encabezado de la lista, útil para organizar secciones.
  • ion-item: Representa un elemento dentro de la lista.

Paso 3: Personalización básica con CSS

Para darle un toque visualmente atractivo a esta lista, añadiremos algunos estilos en src/app/home/home.page.scss:

ion-list-header {
  background: linear-gradient(to right, #6a11cb, #2575fc);
  color: white;
  font-weight: bold;
  padding: 12px;
  text-transform: uppercase;
}

ion-item {
  border-bottom: 1px solid #e0e0e0;
  margin: 5px 0;
  padding: 10px;
}

ion-label {
  color: #444;
}

En este paso, hemos personalizado el encabezado con un degradado azul y blanco, y le hemos dado un borde y espaciado a los ítems de la lista.


Paso 4: Agregar una lista con íconos y cheques

Una lista con íconos o ion-checkbox puede ser muy útil en aplicaciones donde se desea seleccionar elementos. Modificaremos el HTML para agregar íconos y cajas de selección:

<ion-list>
  <ion-list-header>
    Preferencias del Usuario
  </ion-list-header>

  <ion-item>
    <ion-checkbox slot="start"></ion-checkbox>
    <ion-label>Activar Modo Oscuro</ion-label>
    <ion-icon name="moon" slot="end"></ion-icon>
  </ion-item>

  <ion-item>
    <ion-checkbox slot="start"></ion-checkbox>
    <ion-label>Notificaciones Push</ion-label>
    <ion-icon name="notifications" slot="end"></ion-icon>
  </ion-item>
</ion-list>

Explicación:

  • ion-checkbox: Agrega una casilla de selección al inicio del ítem de la lista.
  • ion-icon: Añade un ícono visual al final de cada ítem para mejorar la interfaz.

Paso 5: Estilos personalizados para listas interactivas

Vamos a añadir más personalización para hacer la lista más atractiva, enfocándonos en la interacción visual del usuario.

En home.page.scss:

ion-item {
  display: flex;
  align-items: center;
  border-radius: 10px;
  background: linear-gradient(to right, #ffffff, #f0f0f0);
  margin: 8px 0;
  transition: background 0.3s ease;
}

ion-item:hover {
  background: linear-gradient(to right, #f9f9f9, #ececec);
}

ion-checkbox {
  --background: #6a11cb;
  --border-color: #6a11cb;
}

ion-icon {
  color: #6a11cb;
}

Explicación del CSS:

  • Gradientes y transiciones: Añadimos transiciones suaves y un cambio de color de fondo al pasar el cursor por encima de los ítems.
  • ion-checkbox: Personalizamos los colores de las casillas de verificación e íconos para que combinen con el esquema de colores general.

Paso 6: Lista dinámica y con swipe para eliminar ítems

Ahora vamos a crear una lista con la funcionalidad de eliminar ítems al deslizar (swipe).

En home.page.ts, agregaremos una lista dinámica:

import { Component } from '@angular/core';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage {
  items = ['Item 1', 'Item 2', 'Item 3', 'Item 4'];

  removeItem(index: number) {
    this.items.splice(index, 1);
  }
}

Y en home.page.html:

<ion-list>
  <ion-list-header>Lista Deslizable</ion-list-header>

  <ion-item-sliding *ngFor="let item of items; let i = index">
    <ion-item>
      <ion-label>{{ item }}</ion-label>
    </ion-item>

    <ion-item-options side="end">
      <ion-item-option color="danger" (click)="removeItem(i)">Eliminar</ion-item-option>
    </ion-item-options>
  </ion-item-sliding>
</ion-list>

Explicación:

  • ion-item-sliding: Permite que los ítems de la lista se puedan deslizar para revelar acciones.
  • ion-item-option: Proporciona una opción de «Eliminar» cuando el usuario desliza el ítem.

Paso 7: Reordenamiento de ítems

Otra característica útil en listas es permitir que los usuarios reordenen los elementos. Podemos hacerlo con el componente ion-reorder:

En home.page.html:

<ion-list>
  <ion-list-header>Reordenar Elementos</ion-list-header>

  <ion-reorder-group (ionItemReorder)="doReorder($event)">
    <ion-item *ngFor="let item of items">
      <ion-label>{{ item }}</ion-label>
      <ion-reorder slot="end"></ion-reorder>
    </ion-item>
  </ion-reorder-group>
</ion-list>

Y en home.page.ts:

doReorder(event: any) {
  const itemMove = this.items.splice(event.detail.from, 1)[0];
  this.items.splice(event.detail.to, 0, itemMove);
  event.detail.complete();
}

Explicación:

  • ion-reorder-group: Agrupa los elementos que pueden ser reordenados.
  • ion-reorder: Añade un ícono de reordenamiento a cada ítem, permitiendo que los usuarios los arrastren y muevan.

Paso 8: Lista de contactos con imágenes personalizadas

Para dar un toque final al tutorial, crearemos una lista de contactos con imágenes y personalizaremos su estilo.

En home.page.html:

<ion-list>
  <ion-list-header>Contactos</ion-list-header>

  <ion-item *ngFor="let contact of contacts">
    <ion-avatar slot="start">
      <img [src]="contact.img">
    </ion-avatar>
    <ion-label>{{ contact.name }}</ion-label>
  </ion-item>
</ion-list>

En home.page.ts, añadimos los datos de contacto:

contacts = [
  { name: 'Juan Pérez', img: 'assets/img/juan.jpg' },
  { name: 'Ana Gómez', img: 'assets/img/ana.jpg' },
  { name: 'Luis Torres', img: 'assets/img/luis.jpg' }
];

Explicación:

  • ion-avatar: Añade un avatar o imagen al principio de cada ítem.
  • img: Se utiliza para mostrar las imágenes de los contactos.

Conclusión:

Este tutorial detallado ha cubierto diversos usos de «ion-list» / ion-list-header, desde listas básicas hasta listas avanzadas con funcionalidades de reordenamiento, eliminación, selección múltiple y personalización visual. Hemos aplicado técnicas de CSS para mejorar la apariencia y hemos explorado cómo interactuar con los componentes mediante TypeScript.

Puedes seguir expandiendo esta lista con más funcionalidades según las necesidades de tu proyecto, como filtros de búsqueda, animaciones adicionales, o integración con bases de datos para listas dinámicas.

Si tienes más solicitudes o necesitas detalles adicionales, ¡no dudes en preguntar! Puedes comunicarte con nosotros por cualquiera de todas nuestras redes sociales, incluyendo Telegram y WhatsApp, ve a la sección contacto desde la sección contacto

Otros tutoriales populares

Espacio publicitario:

Scroll al inicio