No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Flutter

Curso de Flutter

Alison Jimenez

Alison Jimenez

Cómo Usar ListView en Flutter

15/26
Recursos

Conectando una API a una aplicación para mostrar recetas dinámicamente es una tarea esencial en el desarrollo de software moderno. En este artículo, exploramos cómo usar widgets como ListView y FutureBuilder para consumir datos JSON y renderizarlos de manera eficiente, permitiendo una experiencia fluida para el usuario.

¿Qué es y cómo funciona el widget ListView?

  • ListView es ideal para mostrar listas extensas con un alto rendimiento.
  • Solo renderiza los elementos visibles en pantalla, optimizando memoria y procesamiento.
  • Incluye un constructor llamado builder, esencial para generar listas dinámicas.

Características clave de ListView.builder:

  • itemCount: define la cantidad de elementos en la lista.
  • itemBuilder: describe cómo se renderiza cada elemento, utilizando el índice y el contexto de la aplicación.

¿Cómo integrar datos dinámicos con FutureBuilder?

  • FutureBuilder facilita la conexión de la interfaz con datos asíncronos.
  • Escucha los resultados de una API y construye los widgets en base a estos datos.

Proceso básico con FutureBuilder:

  1. Configura la fuente de datos asíncrona, como una función fetch.
  2. Valida los datos recibidos para evitar errores al renderizar listas vacías.
  3. Construye widgets dinámicos en función del estado del snapshot.

¿Cómo reusar componentes con datos JSON?

  • Utilizamos un widget personalizado, como RecipeCard, para encapsular el diseño de cada elemento.
  • Los datos del JSON, como nombre, imagen y autor, se asignan directamente a las propiedades del widget.

Pasos para integrar JSON en componentes reutilizables:

  1. Extrae datos del JSON utilizando claves como name, image_link y author.
  2. Pasa los datos al widget mediante propiedades dinámicas.
  3. Valida que las propiedades no sean nulas antes de renderizarlas.

¿Qué ajustes considerar al usar APIs en entornos locales?

  • Al trabajar en simuladores móviles, recuerda que los puertos para Android e iOS son diferentes:
    • Android: 10.0.2.2
    • iOS: 127.0.0.1
  • Para accesos globales, configura el servidor local en 0.0.0.0.

Buenas prácticas al conectar APIs locales:

  • Reinicia el servidor después de cambios significativos.
  • Configura correctamente las URL para evitar problemas de conexión.

¿Cómo manejar errores y mejorar la experiencia del usuario?

  • Valida si los datos están vacíos y muestra una lista vacía en lugar de errores.
  • Maneja imágenes faltantes con mensajes o gráficos alternativos.
  • Revisa animaciones predeterminadas para mantener una experiencia atractiva.

Aportes 8

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Gracias por tan buena clase, que sean más. Por otro lado, en mi caso yo estaba desplegando en el móvil que tengo, esto activando modo desarrollador en el celular, y también el modo de debugg USB, conectar el celular al computador por USB, y compartir. Me dí cuenta que el IP 10.0.2.2 no funcionaba, y lo que si funcionó fue conectar mi celular a la misma red del computador, y colocar esa IP en el código.
La razón por la cual no se debe usar `localhost` al acceder a una API desde un emulador de Android se debe a que el emulador utiliza una dirección IP diferente para referirse a la máquina host. En Android, se usa `10.0.2.2` para acceder a `localhost` del sistema operativo, mientras que en iOS se usa `127.0.0.1`. Esto garantiza que el emulador se conecte correctamente a la API en tu máquina local. Utilizar `localhost` directamente generaría errores de conexión.
En lo personal, utilize la api de **Spoonacular** para tener datos reales de un servidor, las primeras 150 request son totalmente gratis, pero el resto si tienes que pagar... En el caso que te hayas acabado tus request puedes hacer lo que hizo la profe Alison en el video... Como programador que lleva 3 años en el area, las API's es algo que siempre donde quieras que vayas van aparecer tarde que temprano!
Si alguien mas tiene un error 404 al cargar la imagen de la hamburguesa pueden usar el `errorBuilder` para crear un fallback a la imagen aquí un ejemplo ```js Image.network( recipe['image_link'], errorBuilder: (context, error, stackTrace) { return Container( color: Colors.grey[200], // Background for the fallback child: Icon( Icons.broken_image, color: Colors.grey[400], size: 50, ), // Placeholder icon ); }, ), ```
Una API (Interfaz de Programación de Aplicaciones) es como un menú en un restaurante. Imagina que en el menú hay una lista de platos que puedes pedir. Cada plato tiene una descripción y un precio, y al hacer tu pedido, el camarero (la API) se encarga de llevar tu solicitud a la cocina (el servidor). La cocina prepara tu pedido y se lo entrega al camarero, quien luego te lo trae a la mesa. Así, tú no necesitas saber cómo se cocina cada plato, solo interactúas con el menú y el camarero. En el contexto de Flutter, las APIs permiten que tu aplicación se comunique eficientemente con un servidor para obtener datos, como las recetas en el ListView.
Avances UwU ❤❤❤❤ ![](https://static.platzi.com/media/user_upload/image-7e34e3e5-1bc7-43bc-b840-3214d3e35ee2.jpg)
Mí API de cómidas típicas Colombianas: { "recipes": \[ { "name": "Bandeja Paisa", "author": "Doña Gloria", "image\_link": "https://cdn.pixabay.com/photo/2020/06/20/17/44/food-5321841\_1280.jpg", "recipe": \[ "Cocine los frijoles con hogao y plátano maduro.", "Prepare el arroz blanco, carne molida y chicharrón.", "Fría los huevos y sirva con aguacate.", "Acompañe con una arepa antioqueña." ] }, { "name": "Ajiaco Santafereño", "author": "Chef Andrés", "image\_link": "https://cdn.pixabay.com/photo/2019/09/25/16/29/tamale-4504060\_960\_720.jpg", "recipe": \[ "Cocine las papas con pollo y mazorca.", "Agregue guascas y deje cocinar a fuego lento.", "Sirva con crema de leche y alcaparras.", "Acompañe con arroz blanco y aguacate." ] }, { "name": "Sancocho Valluno", "author": "Abuela Marta", "image\_link": "https://cdn.pixabay.com/photo/2016/07/20/07/00/gastronomy-1529736\_1280.jpg", "recipe": \[ "Cocine el pollo en agua con cebolla y ajo.", "Agregue yuca, papa criolla y plátano verde.", "Incorpore mazorca y cilantro fresco.", "Sirva con arroz blanco y aguacate." ] }, { "name": "Arepas de Chócolo", "author": "Panadería El Molino", "image\_link": "https://cdn.pixabay.com/photo/2014/09/23/04/19/corn-457153\_960\_720.jpg", "recipe": \[ "Licúe maíz tierno con leche, azúcar y sal.", "Vierta la mezcla en un sartén caliente con mantequilla.", "Cocine hasta dorar por ambos lados.", "Acompañe con queso fresco derretido." ] }, { "name": "Empanadas Colombianas", "author": "Doña Luz", "image\_link": "https://cdn.pixabay.com/photo/2020/02/11/19/03/meal-4840666\_1280.jpg", "recipe": \[ "Prepare la masa con harina de maíz, agua y sal.", "Rellene con carne desmechada y papa criolla.", "Forme las empanadas y séllalas con cuidado.", "Fríalas en aceite caliente hasta dorar." ] } ] }
Una solución para conectar el servidor de nuestra API con la app de flutter es utilizar un tunel HTTP con ngrok es muy sencillo solo deben correr `ngrok http [puerto]` Y con eso copiar la URL y pegarla dentro de Uri.parse quedaría algo como esto `final url = Uri.parse( ``'https://d348-2800-bf0-7f-de4-3fb2-11a0-80c4-8102.ngrok-free.app/recipes'``);`