Contador en Flutter con setState: ejercicio resuelto paso a paso

Contador en Flutter con setState: ejercicio resuelto

Si buscas contador en Flutter con setState, este ejercicio resuelto te enseña el patrón base para actualizar interfaz en tiempo real con estado local.

Enunciado

Construye una pantalla con:

  • contador visible en el centro,
  • botón para incrementar,
  • botón para decrementar,
  • botón para resetear a cero.

Solución en Flutter

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(home: CounterPage());
  }
}

class CounterPage extends StatefulWidget {
  const CounterPage({super.key});

  @override
  State<CounterPage> createState() => _CounterPageState();
}

class _CounterPageState extends State<CounterPage> {
  int counter = 0;

  void increment() => setState(() => counter += 1);
  void decrement() => setState(() => counter -= 1);
  void reset() => setState(() => counter = 0);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Contador con setState')),
      body: Center(
        child: Text('$counter', style: const TextStyle(fontSize: 48)),
      ),
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          FloatingActionButton(onPressed: increment, child: const Icon(Icons.add)),
          const SizedBox(height: 8),
          FloatingActionButton(onPressed: decrement, child: const Icon(Icons.remove)),
          const SizedBox(height: 8),
          FloatingActionButton(onPressed: reset, child: const Icon(Icons.refresh)),
        ],
      ),
    );
  }
}

Resultado esperado

La vista actualiza el número al pulsar cada botón sin recargar pantalla ni reconstruir toda la app.

Errores frecuentes

  • Modificar counter fuera de setState.
  • Mezclar estado local con estado global sin necesidad.
  • No separar métodos (increment, decrement) y ensuciar build.

Aplicación práctica

Este patrón aparece en cualquier UI reactiva con cambios rápidos, como filtros, likes, votos o pasos de un formulario.

Siguiente ejercicio recomendado

Práctica guiada y siguiente paso

FAQ

¿Cuándo usar setState en Flutter?

Cuándo el estado afecta solo al widget actual y no necesitas compartirlo en toda la app.

¿Es mejor Provider que setState?

Para estado global sí. Para estado local simple, setState suele ser la opción correcta.

¿Este ejercicio sirve para entrevistas de Flutter?

Sí. Evalúa comprensión de estado, rebuild y organización básica de pantalla.