Saltar a contenido

1.5 Flutter: primera app

Flutter dibuja la interfaz con widgets: todo es un widget (texto, botón, columna, la app entera). Los widgets se anidan formando un árbol.

Crear y ejecutar

flutter create mi_app
cd mi_app
flutter run

Widgets sin estado y con estado

Tipo Cuándo Ejemplo
StatelessWidget La pantalla no cambia con el tiempo Un título, un icono
StatefulWidget Hay datos que cambian Un contador, un formulario

App mínima

import 'package:flutter/material.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        body: Center(child: Text('Hola, Flutter')),
      ),
    );
  }
}

Contador con estado

import 'package:flutter/material.dart';

void main() => runApp(const MaterialApp(home: Contador()));

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

  @override
  State<Contador> createState() => _ContadorState();
}

class _ContadorState extends State<Contador> {
  int _cuenta = 0;

  void _incrementar() {
    setState(() => _cuenta++);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(child: Text('Pulsaciones: $_cuenta')),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementar,
        child: const Icon(Icons.add),
      ),
    );
  }
}

setState

Avisa a Flutter de que el estado cambió para que vuelva a ejecutar build. Modificar _cuenta sin setState no actualiza la pantalla.

Hot reload

Con la app en marcha, pulsar r en la terminal (o guardar en el IDE) recarga el código manteniendo el estado. R reinicia desde cero.