Guía completa de Flutter: El widget Container


Avatar de Pedro Cortez

El Container es probablemente el widget más básico que puedes encontrar en Flutter. Este te servirá para definir las áreas donde colocarás los diferentes elementos de tu aplicación. En este artículo, te enseñaré cómo darles propiedades básicas, pero también cómo hacer que sean redondeados o inclinados.


Container flutter

¿Para qué sirve un Container en Flutter?

Describiéndolo de manera simple, un Container es un espacio rectangular al que le puedes asignar una altura y una anchura. Es un widget básico al que también puedes darle un color y un borde, y en el que puedes colocar otro widget como un ícono, un botón, texto, etc. Los Containers son un widget central en la definición de los diferentes elementos que compondrán tu aplicación.

Aquí te comparto un video de la documentación oficial de Flutter, que te permite comprender de manera ilustrada para qué sirven los Containers.

También existe un widget AnimatedContainer, que tiene más o menos las mismas propiedades, pero que puede cambiar de tamaño, forma, color, etc., para crear animaciones dinámicas en tu aplicación.

¿Cómo darle tamaño, color y margen a mi Container?

Los tres parámetros principales que probablemente querrás asignar a tu Container son:

  • Un tamaño (altura y anchura);
  • Un color;
  • Un margen o padding (margen interior).

Asignar un tamaño a un Container

Puedes definir el tamaño de un Container utilizando las propiedades height (altura) y width (anchura). Estas dos propiedades pueden recibir un valor absoluto (en píxeles) o relativo (según el tamaño de la pantalla o de otro elemento). Aquí tienes un ejemplo sencillo de un Container de 50 píxeles por 50 píxeles, ubicado en el centro de su contenedor:

Center(
  child: Container(
    width: 50,
    height: 50,
  ),
)

Aunque no es obligatorio, te recomiendo siempre asignar un tamaño a tus Containers. De lo contrario, tomará el tamaño del widget que contiene. Sin embargo, algunos widgets como Column o Row toman un tamaño infinito si no se definen las propiedades height y width del Container que los contiene, lo que resultará en un error.

Asignar un color a un Container

Puedes asignar un color a tu Container añadiéndole la propiedad color (color). Existen tres métodos para definir este valor:

  1. Colors.xxx: colores básicos de la paleta de Flutter;
  2. Color.fromARGB(a, r, g, b): los valores deben ser números entre 0 y 255. La letra a representa la opacidad, r el color rojo, g el verde y b el azul;
  3. Color.fromRGBO(r, g, b, opacity): igual que ARGB, pero la opacidad toma un valor entre 0 y 1.

Aquí tienes un ejemplo de cómo asignar un color a nuestro Container de 50 píxeles:

Center(
  child: Container(
    width: 50,
    height: 50,
    color: Colors.greenAccent,
  ),
)

Existen muchas otras maneras de añadir color a un Container, pero aquí te muestro las más simples.

Asignar margen y padding a un Container

El margen te permite crear espacio entre el Container y los elementos que lo rodean. El padding crea espacio entre los bordes del Container y el widget que contiene. Estos dos valores pueden definirse de manera muy sencilla usando alguno de los siguientes métodos:

  • EdgeInsets.all(): añade el mismo margen o padding a todos los lados;
  • EdgeInsets.symmetric(): añade un margen o padding arriba-abajo o derecha-izquierda;
  • EdgeInsets.only(): añade un margen o padding diferente a cada lado.

Al igual que con width y height, estas dos propiedades pueden tomar un valor absoluto (en píxeles) o relativo (a la pantalla o a otro elemento). Aquí tienes un ejemplo sencillo de cómo añadir margen y padding a mi Container:

Center(
  child: Container(
    width: 50,
    height: 50,
    color: Colors.greenAccent,
    margin: EdgeInsets.symmetric(vertical: 10),
    padding: EdgeInsets.only(bottom: 5),
  ),
)

En este caso, he añadido un margen de 10 píxeles arriba y abajo de mi Container, y un padding de 5 píxeles en la parte inferior.

¿Cómo añadir un borde a mi Container en Flutter?

Una pregunta frecuente es cómo añadir un borde a un Container en Flutter. Para hacerlo, debes usar la propiedad decoration, a la cual le asignas un widget BoxDecoration. Este widget contiene a su vez la propiedad border, donde puedes especificar un borde utilizando Border.all(), que toma como argumento el grosor del borde y su color. Aquí te muestro cómo se ve el código:

Center(
  child: Container(
    width: 50,
    height: 50,
    decoration: BoxDecoration(
    border: Border.all(width: 2, color: Colors.black),
    color: Colors.greenAccent,
    ),
    margin: EdgeInsets.symmetric(vertical: 10),
    padding: EdgeInsets.only(bottom: 5),
  ),
)

Cuando añades una propiedad decoration a tu Container, debes especificar el color dentro del widget BoxDecoration. Si no lo haces, tu aplicación fallará y recibirás un mensaje de error.

¿Cómo hacer un Container redondeado o circular en Flutter?

Darle una forma redondeada a tu Container no es tan complicado como parece. Para lograrlo, necesitarás nuevamente el widget BoxDecoration, al cual le agregarás la propiedad borderRadius, que recibe como argumento BorderRadius.circular(radius). Aquí, radius debe ser reemplazado por un valor numérico absoluto o relativo. Cuanto mayor sea el valor, más redondeados serán los bordes, hasta que el Container se vuelva completamente circular:

Center(
  child: Container(
    width: 50,
    height: 50,
    decoration: BoxDecoration(
      border: Border.all(width: 2, color: Colors.black),
      borderRadius: BorderRadius.circular(5),
      color: Colors.greenAccent,
    ),
    margin: EdgeInsets.symmetric(vertical: 10),
    padding: EdgeInsets.only(bottom: 5),
  ),
)

¿Cómo hacer un Container inclinado?

Por último, tal vez te preguntes cómo cambiar la orientación de un Container. Por ejemplo, ¿cómo hacer que un Container tenga forma de rombo? Simplemente utilizando la propiedad transform, que toma como argumento el método Matrix4.rotationZ(radian). Radian es un valor entre 0 y 1, como en el siguiente ejemplo:

Center(
  child: Container(
    width: 50,
    height: 50,
    decoration: BoxDecoration(
      border: Border.all(width: 2, color: Colors.black),
      color: Colors.greenAccent,
    ),
    transform: Matrix4.rotationZ(0.1),
    margin: EdgeInsets.symmetric(vertical: 10),
    padding: EdgeInsets.only(bottom: 5),
  ),
)

Conclusión

Ahora que conoces los widgets Scaffold y Container, estás listo para comenzar a colocar los primeros elementos de tu aplicación. Sin embargo, ¿cómo posicionarlos exactamente donde deseas? Te cuento más en estos dos artículos:

Guía completa de Flutter: El widget Column

Guía completa de Flutter: El widget Row

Avatar de Pedro Cortez