Organiza varios widgets en pantalla usando columnas, filas, espaciado y distribución del espacio.
Abrir esta lección en KodokonUna pantalla real rara vez muestra un solo widget: hay que organizarlos. Ese es el trabajo de los widgets de maquetación. Column apila a sus hijos verticalmente, de arriba abajo; Row los alinea horizontalmente, de izquierda a derecha. Como aceptan varios hijos, el parámetro ya no se llama child sino children, y recibe una lista: widgets entre corchetes [ ], separados por comas.
import 'package:flutter/material.dart';
Widget buildProfile() {
return const Column(
children: [
Icon(Icons.person, size: 48),
Text("Sonia Ben Ali"),
Text("Flutter Developer"),
],
);
}Row funciona exactamente igual, pero en horizontal. Su eje principal es el ancho: el parámetro mainAxisAlignment elige cómo distribuir a los hijos a lo largo de ese eje (center para agruparlos en el medio, spaceBetween para separarlos lo máximo posible...). Y para deslizar un simple espacio vacío entre dos widgets, usa SizedBox: una caja invisible cuyo ancho (width) o alto (height) fijas.
import 'package:flutter/material.dart';
Widget buildRating() {
return const Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.star, color: Colors.amber),
SizedBox(width: 8),
Text("4.8 out of 5"),
],
);
}Padding añade espacio alrededor de su hijo, para que el contenido no se pegue a los bordes. La cantidad de espacio se describe con EdgeInsets: EdgeInsets.all(16) pone 16 píxeles en los cuatro lados, EdgeInsets.only(left: 8) solo a la izquierda y EdgeInsets.symmetric(horizontal: 12) a la izquierda y a la derecha al mismo tiempo.
import 'package:flutter/material.dart';
Widget buildQuote() {
return const Padding(
padding: EdgeInsets.all(16),
child: Text("A text with some room around it"),
);
}Una última herramienta: Expanded. Colocado entre los hijos de una Row o de una Column, le pide a su hijo que ocupe todo el espacio restante. En el ejemplo de abajo, la caja gris conserva sus 80 píxeles de ancho, y la caja verde azulada se estira para llenar el resto del ancho, sea cual sea el tamaño de la pantalla.
import 'package:flutter/material.dart';
Widget buildProgress() {
return Row(
children: [
Container(width: 80, height: 40, color: Colors.grey),
Expanded(
child: Container(height: 40, color: Colors.teal),
),
],
);
}