Volver al blog

Flutter

Manejando Estados con Flutter Utilizando Provider

Aprende a gestionar el estado de tu aplicación Flutter de manera eficiente usando Provider. Descubre patrones de diseño y mejores prácticas para aplicaciones escalables.

Alberto Guaman diciembre 28, 2024 12 min de lectura
Compartir

4

Categorías

8

Etiquetas

Temas

Flutter Provider Estado Desarrollo Móvil
Manejando Estados con Flutter Utilizando Provider

¿Quieres construir apps Flutter reactivas y escalables?
¡Provider es la solución recomendada para manejar el estado de forma sencilla y eficiente!


¿Qué es Provider?

Provider es un paquete oficial de Flutter para la gestión de estado. Permite compartir datos y lógica entre widgets de manera reactiva, eficiente y desacoplada.

  • Sencillo: Fácil de aprender y usar.
  • Escalable: Ideal para proyectos pequeños y grandes.
  • Recomendado: Es la solución sugerida por el equipo de Flutter.

¿Por qué necesitas manejar el estado?

En Flutter, el “estado” es cualquier dato que puede cambiar durante la vida de la app (ej: usuario logueado, contador, lista de tareas, etc). Manejarlo bien es clave para apps robustas y mantenibles.


Instalación de Provider

Agrega Provider a tu archivo pubspec.yaml:

dependencies:
  flutter:
    sdk: flutter
  provider: ^6.0.0

Luego ejecuta:

flutter pub get

Ejemplo básico: Contador con Provider

1. Crea una clase de estado

import 'package:flutter/material.dart';

class ContadorModel with ChangeNotifier {
  int _valor = 0;

  int get valor => _valor;

  void incrementar() {
    _valor++;
    notifyListeners();
  }
}

2. Provee el estado en el árbol de widgets

import 'package:provider/provider.dart';

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (_) => ContadorModel(),
      child: MyApp(),
    ),
  );
}

3. Consume el estado en tus widgets

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Contador con Provider')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('Valor actual:'),
              Consumer<ContadorModel>(
                builder: (context, contador, child) =>
                  Text(
                    '${contador.valor}',
                    style: TextStyle(fontSize: 40, fontWeight: FontWeight.bold),
                  ),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () => context.read<ContadorModel>().incrementar(),
                child: Text('Incrementar'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

¿Cómo funciona Provider?

  • ChangeNotifier: Clase base que notifica a los widgets cuando hay cambios.
  • ChangeNotifierProvider: Provee una instancia de tu modelo a los widgets hijos.
  • Consumer: Widget que escucha los cambios y reconstruye solo lo necesario.
  • context.read() / context.watch(): Acceso directo al modelo desde el contexto.

Buenas prácticas con Provider

  • Mantén la lógica de negocio fuera de los widgets.
  • Usa varios providers para separar responsabilidades (ej: AuthProvider, CartProvider, etc).
  • Evita anidar demasiados providers, usa MultiProvider si es necesario.
  • Usa notifyListeners() solo cuando realmente cambie el estado.

Ejemplo avanzado: Lista de tareas (To-Do)

1. Modelo de tarea y provider

class Tarea {
  final String titulo;
  bool completada;

  Tarea(this.titulo, {this.completada = false});
}

class TareasProvider with ChangeNotifier {
  List<Tarea> _tareas = [];

  List<Tarea> get tareas => _tareas;

  void agregarTarea(String titulo) {
    _tareas.add(Tarea(titulo));
    notifyListeners();
  }

  void toggleTarea(int index) {
    _tareas[index].completada = !_tareas[index].completada;
    notifyListeners();
  }
}

2. Proveer y consumir el estado

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (_) => TareasProvider(),
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TareasScreen(),
    );
  }
}

class TareasScreen extends StatelessWidget {
  final TextEditingController _controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Lista de Tareas')),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(16.0),
            child: Row(
              children: [
                Expanded(
                  child: TextField(
                    controller: _controller,
                    decoration: InputDecoration(hintText: 'Nueva tarea'),
                  ),
                ),
                IconButton(
                  icon: Icon(Icons.add),
                  onPressed: () {
                    if (_controller.text.isNotEmpty) {
                      context.read<TareasProvider>().agregarTarea(_controller.text);
                      _controller.clear();
                    }
                  },
                )
              ],
            ),
          ),
          Expanded(
            child: Consumer<TareasProvider>(
              builder: (context, tareasProvider, child) => ListView.builder(
                itemCount: tareasProvider.tareas.length,
                itemBuilder: (context, index) {
                  final tarea = tareasProvider.tareas[index];
                  return ListTile(
                    title: Text(
                      tarea.titulo,
                      style: TextStyle(
                        decoration: tarea.completada ? TextDecoration.lineThrough : null,
                      ),
                    ),
                    trailing: Checkbox(
                      value: tarea.completada,
                      onChanged: (_) => context.read<TareasProvider>().toggleTarea(index),
                    ),
                  );
                },
              ),
            ),
          ),
        ],
      ),
    );
  }
}

Recursos útiles


¿Listo para crear apps Flutter reactivas y escalables?
¡Con Provider, manejar el estado es más fácil que nunca!

Testimonios

Qué dicen nuestros clientes

Comentarios reales de negocios que ya trabajaron con nosotros en web, sistemas y apps.

Excelente

23 reseñas · Trustindex

Excelente profesional, rápido y amable en todo el proceso de lo que necesitas crear.

RM

Raúl M****

13 ago 2024

Tinguar es una empresa de diseño web de primer nivel que superó todas mis expectativas. La calidad de su trabajo es impecable.

BG

Bryan G****

22 feb 2024

Excelente servicio, me ayudo con mi pagina EEUU. Lo recomiendo 100%.

JL

Jorge L****

26 abr 2024

Excelente servicio, me realizo la pagina web y va de maravilla. Recomendable.

DJ

Daniel J****

4 mar 2024

Excelente servicio y atención, recomendado llevo años con esta empresa y son muy profesionales.

AA

Adrian A****

6 jun 2023

El gerente excelente profesional, realizó nuestra página para el centro pre universitario.. 10 / 10

CL

Carranza L****

2 sept 2023

Increíble trabajo, muy profesional y puntual. Mi sitio web quedó perfecto.

MG

María G****

15 ene 2024

Excelente atención al cliente y resultados sobresalientes. Altamente recomendado.

CR

Carlos R****

20 may 2024

Trabajo de calidad superior, entregaron antes de lo esperado. Muy satisfecho.

AM

Ana M****

18 mar 2024

Profesionales de primera, entendieron perfectamente lo que necesitaba.

LF

Luis F****

10 jun 2024

Servicio excepcional, comunicación clara y resultados excelentes.

PS

Patricia S****

5 abr 2024

Equipo muy competente, transformaron mi idea en una realidad digital increíble.

RT

Roberto T****

22 jul 2024

Pedí un POS para mi tienda y al final me ayudaron hasta con el ticket de la impresora térmica. Antes tenía todo en cuaderno jaja.

KE

Karina E****

11 feb 2025

La verdad se demoraron un poquito al inicio pero me avisaron. La web quedó bien y me enseñaron a subir productos yo mismo.

Miguel Á****

3 may 2025

Buscaba algo para controlar renovaciones de streaming y ya no pelear con Excel. Me salió mucho más ordenado de lo que imaginaba.

DC

Diego C****

19 ago 2025

Hicieron la página de mi consultorio. Nada exagerado, limpia y fácil de leer. Mis pacientes ahora agendan por WhatsApp sin problema.

VA

Verónica A****

28 nov 2024

Lo bueno es que contestan. Uno escribe a las 9 de la noche y al día siguiente ya tienen avance. Yo soy de Cuenca y todo fue remoto.

EM

Esteban M****

17 ene 2025

Nos armó un panel chiquito para el inventario de 2 locales. No es un monstruo de software, es justo lo que necesitábamos.

PR

Paola R****

9 mar 2025

Me hicieron landing de un curso online. En 2 semanas ya tenía formulario y pagos. Precio razonable frente a otras cotizaciones.

AV

Andrés V****

14 sept 2024

Había trabajado con otro provider y me dejaron botado. Aquí por lo menos explican qué están haciendo y por qué.

SN

Sofía N****

21 jun 2025

App android para mi equipo de ventas. Falló un detalle al principio, lo corrigieron el mismo viernes. Eso me convenció.

HZ

Héctor Z****

2 abr 2025

No soy técnica, solo quería una web seria para mi marca de ropa. Me guiaron sin hablar en código y quedó linda.

CO

Camila O****

8 jul 2025

Llevo el hosting con ellos desde el 2023. Si algo se cae, avisan. Eso vale oro cuando uno vende online.

JM

Jaime M****

25 sept 2025

Excelente profesional, rápido y amable en todo el proceso de lo que necesitas crear.

RM

Raúl M****

13 ago 2024

Tinguar es una empresa de diseño web de primer nivel que superó todas mis expectativas. La calidad de su trabajo es impecable.

BG

Bryan G****

22 feb 2024

Excelente servicio, me ayudo con mi pagina EEUU. Lo recomiendo 100%.

JL

Jorge L****

26 abr 2024

Excelente servicio, me realizo la pagina web y va de maravilla. Recomendable.

DJ

Daniel J****

4 mar 2024

Excelente servicio y atención, recomendado llevo años con esta empresa y son muy profesionales.

AA

Adrian A****

6 jun 2023

El gerente excelente profesional, realizó nuestra página para el centro pre universitario.. 10 / 10

CL

Carranza L****

2 sept 2023

Increíble trabajo, muy profesional y puntual. Mi sitio web quedó perfecto.

MG

María G****

15 ene 2024

Excelente atención al cliente y resultados sobresalientes. Altamente recomendado.

CR

Carlos R****

20 may 2024

Trabajo de calidad superior, entregaron antes de lo esperado. Muy satisfecho.

AM

Ana M****

18 mar 2024

Profesionales de primera, entendieron perfectamente lo que necesitaba.

LF

Luis F****

10 jun 2024

Servicio excepcional, comunicación clara y resultados excelentes.

PS

Patricia S****

5 abr 2024

Equipo muy competente, transformaron mi idea en una realidad digital increíble.

RT

Roberto T****

22 jul 2024

Pedí un POS para mi tienda y al final me ayudaron hasta con el ticket de la impresora térmica. Antes tenía todo en cuaderno jaja.

KE

Karina E****

11 feb 2025

La verdad se demoraron un poquito al inicio pero me avisaron. La web quedó bien y me enseñaron a subir productos yo mismo.

Miguel Á****

3 may 2025

Buscaba algo para controlar renovaciones de streaming y ya no pelear con Excel. Me salió mucho más ordenado de lo que imaginaba.

DC

Diego C****

19 ago 2025

Hicieron la página de mi consultorio. Nada exagerado, limpia y fácil de leer. Mis pacientes ahora agendan por WhatsApp sin problema.

VA

Verónica A****

28 nov 2024

Lo bueno es que contestan. Uno escribe a las 9 de la noche y al día siguiente ya tienen avance. Yo soy de Cuenca y todo fue remoto.

EM

Esteban M****

17 ene 2025

Nos armó un panel chiquito para el inventario de 2 locales. No es un monstruo de software, es justo lo que necesitábamos.

PR

Paola R****

9 mar 2025

Me hicieron landing de un curso online. En 2 semanas ya tenía formulario y pagos. Precio razonable frente a otras cotizaciones.

AV

Andrés V****

14 sept 2024

Había trabajado con otro provider y me dejaron botado. Aquí por lo menos explican qué están haciendo y por qué.

SN

Sofía N****

21 jun 2025

App android para mi equipo de ventas. Falló un detalle al principio, lo corrigieron el mismo viernes. Eso me convenció.

HZ

Héctor Z****

2 abr 2025

No soy técnica, solo quería una web seria para mi marca de ropa. Me guiaron sin hablar en código y quedó linda.

CO

Camila O****

8 jul 2025

Llevo el hosting con ellos desde el 2023. Si algo se cae, avisan. Eso vale oro cuando uno vende online.

JM

Jaime M****

25 sept 2025

Contacto

Cuéntanos tu proyecto

Respuesta rápida. Te orientamos el siguiente paso sin rodeos.

Envíanos un mensaje

WhatsApp directo

Se abre WhatsApp con tu mensaje listo. Sin spam ni formularios opacos.

<24h

Respuesta

Diagnóstico

Sin costo

EC

Base

LATAM

Cobertura

Canales

WhatsApp

+593 99 860 2204

Email

contacto@tinguar.com

Ubicación

Santo Domingo · Shushufindi
Ecuador · atención remota LATAM

¡Comunicate por WhatsApp !