Provider en Flutter: gestión de estado paso a paso
Lección del curso gratis de Flutter de Thomas Viana: entiendes la gestión de estado y aplicas Provider en una app real de ingresos y gastos.
El vídeo empieza en el minuto de esta lección y sigue con el resto del curso. Ver el curso completo con su índice · Ver en YouTube
Provider es un paquete de Flutter para gestionar el estado: guarda los datos en un único sitio, los pone a disposición de todo el árbol de widgets y avisa solo a los widgets que los están escuchando cuando cambian. En esta lección del curso de Flutter gratis, publicado en agosto de 2024, Thomas Viana explica la idea y la aplica en Money Tracker, una app de ingresos y gastos.
Por qué setState se queda corto
En la app, un formulario recoge una transacción y otros widgets, en otras ramas del árbol, tienen que mostrarla. Con setState habría que subir los datos hasta un widget común con callbacks, lo que se llama lifting state up, y luego bajarlos por los constructores de cada widget. En una app pequeña sirve, pero en una grande se vuelve difícil de mantener.
La idea: un proveedor y quien escucha
Soluciones como InheritedWidget, Provider o BLoC se basan en el mismo principio. El provider se coloca tan arriba en el árbol como haga falta para que todos los widgets que necesitan los datos puedan acceder a ellos. Thomas cuenta que él usa mucho BLoC y que Flutter recomienda Provider; lo importante es entender el principio.
- El provider guarda los datos y los ofrece a todo el árbol.
- Los listeners son los widgets que escuchan esos datos.
- Cuando algo cambia, el provider avisa solo a quien escucha.
Crear un provider con ChangeNotifier
En la práctica, Thomas crea la clase TransactionsProvider. Extiende ChangeNotifier, que le da el método notifyListeners para avisar de los cambios. Dentro guarda la lista de transacciones como privada y la expone sin permitir que se modifique desde fuera. Añade un método para agregar transacciones y calcula los totales de ingresos y gastos. También muestra cómo acortar algunos métodos con la sintaxis de flecha, que hace lo mismo sin llaves ni return.
Instalar el paquete y leer los datos
Provider es una librería externa: se añade como dependencia del proyecto. Después se envuelve la app en un ChangeNotifierProvider con su propiedad create, en la parte más alta del árbol. Por último, la lista de movimientos lee las transacciones del provider y las pinta con ListView.builder, que construye un elemento por cada transacción. Para añadir dependencias más rápido, Thomas recomienda una extensión de Visual Studio Code.
Dudas sobre esta lección
¿Qué es Provider en Flutter?
Provider es un paquete para gestionar el estado de una app de Flutter. Permite guardar datos en una clase, compartirlos con cualquier widget del árbol y actualizar automáticamente los widgets que los escuchan cuando esos datos cambian, sin pasarlos de constructor en constructor.
¿Qué diferencia hay entre setState y Provider?
setState actualiza el estado de un solo widget y vuelve a construirlo. Provider guarda el estado fuera de los widgets y lo comparte con toda la app. Según Thomas Viana, setState sirve para casos pequeños, pero en apps que crecen es mejor una solución como Provider o BLoC.
¿Qué es ChangeNotifier y notifyListeners?
ChangeNotifier es una clase de Flutter que puedes extender en tu provider. Le da el método notifyListeners, que avisa a los widgets que escuchan de que los datos han cambiado para que se vuelvan a dibujar. En la lección se llama después de añadir una transacción.
¿Es mejor Provider o BLoC?
El curso no elige uno como el mejor. Thomas Viana dice que él usa mucho BLoC y que Flutter recomienda Provider, y que los dos se basan en el mismo principio de proveedores y oyentes. Si empiezas, la lección aplica Provider en una app real, con lo que aprendes en el resto del curso de Flutter gratis.
Más lecciones de este curso
- Cómo hacer un perfil de LinkedIn que atraiga a reclutadoresEmpieza en el 10:39:03
- Cómo subir un proyecto a GitHub paso a pasoEmpieza en el 09:45:31
- Qué es Git y cómo se trabaja con ramasEmpieza en el 09:28:01
- Qué es Scrum y cómo trabaja un equipo de desarrolloEmpieza en el 10:27:48
- Stateless vs stateful en FlutterEmpieza en el 04:20:04
- Widgets en Flutter: cómo se construye una pantallaEmpieza en el 19:44
Lecciones relacionadas de otros cursos
- Rank Math tutorial: SEO básico para tu web en WordPressLección · Cómo crear una página web profesional con WordPress: curso gratis paso a paso
- Bucles en Python: for y while con ejemplosLección · Curso de Python gratis: aprende a programar desde cero
- Cómo crear una política de privacidad para tu web o appLección · Cómo crear una app desde cero sin programar: curso gratis con inteligencia artificial
- Cómo instalar Python y preparar tu editorLección · Curso de Python gratis: aprende a programar desde cero
