Ir al contenido

Guía de Flutter para novatos - Miguel Páramos

FAQ sobre Flutter pal que no tiene ni idea de Flutter | 2º DAM · PMDM

Técnicas de depuración visual de Layouts: cómo visualizar cajas y límites con ColoredBox y debugPaintSizeEnabled

Cuando una interfaz en Flutter no se alinea como esperamos o surgen problemas de desbordamiento (overflow), resulta indispensable inspeccionar las dimensiones y límites exactos de cada componente. Existen dos técnicas fundamentales y complementarias para “hacer visible lo invisible” en el árbol de renderizado:

Técnica 1: Envolver elementos con ColoredBox (Rápido y quirúrgico)

Sección titulada «Técnica 1: Envolver elementos con ColoredBox (Rápido y quirúrgico)»

Aunque a menudo se recurre a Container(color: Colors.red, child: ...), el widget Container es un componente más pesado que introduce capas internas de decoración y restricciones de dimensiones.

Para inspeccionar visualmente sin alterar la geometría ni el comportamiento del layout, el widget nativo más ligero y directo es ColoredBox:

Column( // Columna con elementos envueltos para depuración visual
children: [ // Widgets inspeccionados
ColoredBox( // Colorea el área exacta ocupada sin alterar restricciones
color: Colors.red.shade200, // Tono rojo claro para verificar contorno
child: const Text('Elemento 1'), // Widget hijo a inspeccionar
), // Fin de ColoredBox
ColoredBox( // Visualiza la separación entre componentes
color: Colors.orange.shade200, // Tono naranja para identificar el espaciador
child: const SizedBox(width: 160, height: 16), // Caja con dimensiones explícitas
), // Fin de ColoredBox
ColoredBox( // Colorea el segundo elemento
color: Colors.green.shade200, // Tono verde claro
child: const Text('Elemento 2'), // Segundo widget de texto
), // Fin de ColoredBox
], // Fin de la lista children
) // Fin de Column

Al asignar un color de fondo diferenciado a cada componente, se aprecia de inmediato si un widget se ha colapsado a cero píxeles, si consume todo el ancho del contenedor o si un espaciador invisible está desplazando el resto de elementos más de lo previsto.

Técnica 2: El Inspector Gráfico con debugPaintSizeEnabled = true

Sección titulada «Técnica 2: El Inspector Gráfico con debugPaintSizeEnabled = true»

El motor gráfico de Flutter incorpora un modo de inspección visual que dibuja las líneas de contorno y límites matemáticos directamente sobre la pantalla en ejecución. Para activarlo:

import 'package:flutter/material.dart'; // Importa la librería Material
import 'package:flutter/rendering.dart'; // Importa el motor gráfico de renderizado para depuración
void main() { // Punto de entrada principal
debugPaintSizeEnabled = true; // Activa el modo de inspección visual con guías de diseño
runApp(const MainApp()); // Arranca la aplicación con las guías activas
} // Fin de la función main

Al iniciar la aplicación, Flutter superpone guías de diseño en tiempo real:

  • Líneas azules / cian: Delimitan el contorno exacto (render box) de cada widget.
  • Zonas rayadas en amarillo: Muestran los márgenes, rellenos (paddings) y zonas de resguardo.
  • Líneas verdes: Marcan la línea base de alineación tipográfica (baseline).
  • Flechas cruzadas: Indican los centros geométricos y los vectores de alineación calculados por Row, Column y Center.