Skip to content

Cheat Sheet de Flutter

Última verificación mayo 2026 — corre en tu navegador
Cheatsheet de Flutter
flutter create my_app

Crear proyecto Flutter nuevo

Configuración
flutter run

Ejecutar app en dispositivo conectado

Configuración
flutter build apk --release

Compilar APK release

Configuración
flutter build ios --release

Compilar iOS release

Configuración
flutter pub add package_name

Añadir dependencia

Configuración
flutter pub get

Instalar dependencias

Configuración
flutter doctor

Comprobar instalación de Flutter

Configuración
flutter clean

Limpiar artefactos de build

Configuración
Text('Hello', style: TextStyle(fontSize: 20))

Widget de texto

Widgets
Icon(Icons.star, color: Colors.amber)

Widget de icono

Widgets
Image.asset('assets/logo.png')

Cargar imagen local

Widgets
Image.network('https://...')

Cargar imagen remota

Widgets
ElevatedButton(onPressed: () {}, child: Text('Go'))

Botón Material elevado

Widgets
TextButton(onPressed: () {}, child: Text('Go'))

Botón de texto plano

Widgets
IconButton(icon: Icon(Icons.add), onPressed: () {})

Botón con icono

Widgets
TextField(decoration: InputDecoration(labelText: 'Name'))

Campo de texto

Widgets
Switch(value: on, onChanged: (v) {})

Switch (interruptor)

Widgets
Checkbox(value: checked, onChanged: (v) {})

Checkbox

Widgets
CircularProgressIndicator()

Spinner de carga

Widgets
Container(padding: EdgeInsets.all(16), color: Colors.blue)

Caja con padding y color

Layout
Padding(padding: EdgeInsets.all(8), child: ...)

Envolver con padding

Layout
Center(child: ...)

Centrar un hijo

Layout
Column(children: [w1, w2, w3])

Apilar verticalmente

Layout
Row(children: [w1, w2, w3])

Apilar horizontalmente

Layout
Stack(children: [bg, overlay])

Hijos superpuestos (eje Z)

Layout
Expanded(flex: 2, child: ...)

Rellenar espacio disponible en Row/Column

Layout
SizedBox(height: 16, width: 200)

Caja/espaciador de tamaño fijo

Layout
Wrap(children: [...])

Saltar de línea al llenarse

Layout
SingleChildScrollView(child: Column(...))

Hacer scrollable el contenido

Layout
ListView.builder(itemCount: n, itemBuilder: (c, i) => ...)

Lista con scroll (lazy)

Layout
GridView.count(crossAxisCount: 2, children: [...])

Grid con columnas fijas

Layout
class MyWidget extends StatelessWidget {
  Widget build(BuildContext c) => ...;
}

Widget stateless

Estado
class MyWidget extends StatefulWidget {
  State<MyWidget> createState() => _S();
}

Widget stateful

Estado
setState(() { count++; });

Disparar reconstrucción

Estado
@override
void initState() { super.initState(); }

Hook de init (ciclo de vida)

Estado
@override
void dispose() { ...; super.dispose(); }

Hook de cleanup (ciclo de vida)

Estado
final _controller = TextEditingController();

Controller del campo de texto

Estado
ValueNotifier<int>(0) + ValueListenableBuilder

Estado reactivo simple

Estado
FutureBuilder(future: fetch(), builder: (c, snap) => ...)

Widget de datos async

Estado
StreamBuilder(stream: s, builder: (c, snap) => ...)

Widget de datos Stream

Estado
Navigator.push(context, MaterialPageRoute(builder: (c) => NextPage()))

Push de nueva ruta

Navegación
Navigator.pop(context)

Volver

Navegación
Navigator.pushNamed(context, '/details')

Push de ruta nombrada

Navegación
Navigator.pushReplacement(context, ...)

Reemplazar ruta actual

Navegación
final result = await Navigator.push(...); 

Push y esperar resultado

Navegación
Navigator.pop(context, value);

Devolver valor al hacer pop

Navegación
EdgeInsets.symmetric(horizontal: 16, vertical: 8)

Abreviatura de padding

Estilos
BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8))

Caja con bordes redondeados

Estilos
Theme.of(context).textTheme.headlineLarge

Acceder al theme

Estilos
MediaQuery.of(context).size.width

Dimensiones de pantalla

Estilos
MaterialApp(theme: ThemeData(primarySwatch: Colors.blue))

App con tema Material

Estilos
Mostrando 51 de 51 entradas

Cheat Sheet de Flutter — Widgets, State Management, Navegación y Layout

Flutter llegó en 2017 con un único árbol de widgets inmutables reconstruido en cada cambio de estado, y ese modelo desconcierta a quien viene de UI imperativa. La chuleta de abajo cubre 50+ widgets y patrones en configuración, widgets, layout, estado, navegación y estilos. La mayoría de los líos en código Flutter no vienen de olvidar widgets. Vienen de rarezas que parecen normales hasta que muerden. Una llamada a `setState` reconstruye el subárbol de `State` entero desde ese widget hacia abajo, así que colocar el estado alto en el árbol convierte una interacción pequeña en un repaint de página y hunde los frame times. `Expanded` y `Flexible` lanzan en runtime fuera de un padre `Row`, `Column` o `Flex` — error frecuente al refactorizar un layout dentro de un `Stack` o un `Wrap`. Los controllers (`TextEditingController`, `ScrollController`, `AnimationController`) necesitan un `dispose` en el ciclo de vida del `State`, y olvidarlo deja listeners disparando contra widgets ya desmontados, que acaban lanzando una excepción. Estos son los fragmentos consultados al depurar eso: el widget de layout, el hook de ciclo de vida, la llamada de navigator que toca, sin releer el catálogo desde la primera entrada.

Trampas habituales en Flutter

Hay un puñado de patrones que merecen sitio cerca de la cabecera de cualquier pantalla Flutter. Conviene empujar el estado lo más abajo posible en el árbol; un `ValueListenableBuilder` alrededor de la hoja que se reconstruye sale mucho más barato que un `setState` sobre la página entera. Conviene marcar los constructores de widget como `const` siempre que se pueda, porque un widget `const` es igual por identidad entre rebuilds y Flutter se salta la reconstrucción — la mayor ganancia de rendimiento gratis en casi cualquier app. `BuildContext` está atado a una posición del árbol, así que llamar a `Navigator.of(context)` tras un `await` puede operar sobre un contexto cuyo widget ya fue eliminado — la comprobación `mounted` en el `State` existe para este caso. `MediaQuery.of(context).size` provoca un rebuild en cada apertura de teclado, rotación o cambio de escala de texto — útil cuando se busca, caro cuando es accidental. `ListView` construye todos los hijos de golpe, mientras que `ListView.builder` es perezoso, así que las listas largas deberían usar la forma builder. La chuleta agrupa esto en Setup, Widgets, Layout, Estado, Navegación y Estilos para que la sección adecuada esté a un clic.

  • Más de 50 widgets y patrones Flutter
  • Comandos CLI de configuración
  • Widgets de layout (Column, Row, Stack)
  • Ciclo de vida del estado y builders
  • Navigator y rutas nombradas
  • Copia al portapapeles con un clic

Gratis. Sin registro. Tus datos permanecen en tu navegador. Anuncios mediante Google AdSense (con consentimiento).

Por ·