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 ColumnAl 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 Materialimport '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 mainAl 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,ColumnyCenter.