Aitor Sánchez - Blog - Oct. 30, 2023, 11:36 a.m.
¿Quieres utilizar la clase Alignment en un widget Align de tu aplicación de Flutter, pero no sabes cómo se utiliza? O, quizás, si que sabes, pero te falta algún detalle que conocer para dejar todo cómo te gustaría ¿verdad?
Mi nombre es Aitor Sánchez, soy desarrollador de apps desde 2014, y en este artículo aprenderás cómo utilizar esta clase, y los valores constantes que tiene para que puedas alinear los widgets.
Pero antes de continuar, esta es la Flutter Mafia. Es mi newsletter donde aprenderás desarrollo de apps móviles, aso y monetización junto con otros genietes que ya están dentro. Y si te suscribes te regalo mi ebook "Duplica los ingreso de tus apps en 5 minutos" No es broma, quizás te interese.
La clase Alignment
en Flutter es una clase que se utiliza para describir la posición de un objeto dentro de un espacio bidimensional.
Esta clase es comúnmente utilizada cuando se desea posicionar un widget dentro de otro widget.
La clase Alignment
tiene dos propiedades, x
y y
, que representan la posición del objeto en el eje horizontal (x) y el eje vertical (y), respectivamente.
Ambos valores son números flotantes comprendidos entre -1.0 y 1.0, donde -1.0 representa la posición más a la izquierda o arriba, 0.0 representa la posición central y 1.0 representa la posición más a la derecha o abajo.
Primero una cosita...
La clase Alignment
tiene varios constructores para crear instancias de ella:
Alignment(double x, double y)
crea una nueva instancia de Alignment
con los valores especificados para x
e y
.Alignment.center
es una constante que representa una posición central (x: 0.0, y: 0.0)Alignment.topLeft
es una constante que representa una posición superior izquierda (x: -1.0, y: -1.0)Alignment.bottomRight
es una constante que representa una posición inferior derecha (x: 1.0, y: 1.0)Por ejemplo, si quieres crear un botón que se alinee en la parte inferior derecha del contenedor podrías usar:
...
Container(
child: Align(
alignment: Alignment.bottomRight,
child: FlatButton(
onPressed: () => print('Hola mundo'),
child: Text('Presiona aquí'),
),
),
)
...
Además de esto, hay una clase llamada Align
que utiliza Alignment
para alinear un widget hijo dentro del espacio asignado a un widget padre. Y existe también FractionalOffset
, que es similar a Alignment
pero utiliza un sistema de coordenadas donde (0,0) es el origen (esquina superior izquierda) del espacio de dibujo y (1,1) es la esquina inferior derecha.
Ahora sí, hay varias formas de utilizar la clase Alignment
en tu aplicación, dependiendo del contexto y de lo que desees lograr. A continuación, te proporciono algunos ejemplos de cómo puedes utilizar Alignment
para alinear elementos dentro de tu aplicación.
1 - Utilizando Align
: Puedes utilizar el widget Align
para alinear un widget hijo dentro del espacio asignado a un widget padre. En el ejemplo que te di anterior, se creó un Container
como widget padre, y se utilizó Align
para alinear un botón en la parte inferior derecha del contenedor:
...
Container(
child: Align(
alignment: Alignment.bottomRight,
child: FlatButton(
onPressed: () => print('Hola mundo'),
child: Text('Presiona aquí'),
),
),
)
...
2 - Utilizando Stack
: Puedes utilizar el widget Stack
para superponer varios widgets uno encima de otro, y luego utilizar Alignment
para posicionar cada widget en la pantalla. En el siguiente ejemplo, se crea un Stack
con tres widgets hijos: un Container
rojo, un Container
azul y un Text
negro. El Container
rojo está alineado en la parte superior izquierda, el Container
azul está alineado en la parte inferior derecha, y el Text
está alineado en el centro:
...
Stack(
children: <Widget>[
Align(
alignment: Alignment.topLeft,
child: Container(
width: 100,
height: 100,
color: Colors.red,
),
),
Align(
alignment: Alignment.bottomRight,
child: Container(
width: 100,
height: 100,
color: Colors.blue,
),
),
Align(
alignment: Alignment.center,
child: Text(
'Hola mundo',
style: TextStyle(color: Colors.black),
),
),
],
)
...
3 - Utilizando Positioned
: Si estas usando un Stack
puedes utilizar Positioned
para posicionar elementos con respecto a las coordenadas del Stack
. En este caso se especifica un Alignment
para calcular las coordenadas left
, right
, top
and bottom
.
...
Stack(
children: <Widget>[
Positioned(
left: 0,
top: 0,
child: Container(
width: 100,
height: 100,
color: Colors.red,
),
),
Positioned(
right: 0,
bottom: 0,
child: Container(
width: 100,
height: 100,
color: Colors.blue,
),
),
Positioned.fill(
child: Align(
alignment: Alignment.center,
child: Text(
'Hola mundo',
style: TextStyle(color: Colors.black),
),
),
),
],
);
...
Hay varias otras formas de utilizar `Alignment` en tu aplicación, pero estos son algunos ejemplos básicos que te pueden ayudar a entender cómo funciona. Es importante recordar que `Alignment` es solo una de las herramientas disponibles para ayudarte a posicionar elementos en tu aplicación, y debes elegir la que mejor se adapte a tus necesidades.
Recuerda, solo vamos a comentar las propias. Las de los padres las comentaremos cuando les toque el turno a ellos.
x
: Es un número flotante que representa la posición del objeto en el eje horizontal. El valor debe estar comprendido entre -1.0 y 1.0, donde -1.0 representa la posición más a la izquierda, 0.0 representa la posición central y 1.0 representa la posición más a la derecha.y
: Es un número flotante que representa la posición del objeto en el eje vertical. El valor debe estar comprendido entre -1.0 y 1.0, donde -1.0 representa la posición más arriba, 0.0 representa la posición central y 1.0 representa la posición más abajo.
Alignment(double x, double y)
crea una nueva instancia de Alignment
con los valores especificados para x
e y
.Alignment.fromFractionalOffsets(FractionalOffset a, FractionalOffset b)
crea una nueva instancia de Alignment
a partir de dos FractionalOffset
.
Alignment
que está a un "t" por ciento entre la instancia "a" y "b", es decir, devuelve una interpolación lineal entre dos puntos de alineación.
Alignment(0.0, 1.0)
Alignment(-1.0, 1.0)
Alignment(1.0, 1.0)
Alignment(0.0, 0.0)
Alignment(-1.0, 0.0)
Alignment(1.0, 0.0)
Alignment(0.0, -1.0)
Alignment(-1.0, -1.0)
Alignment(1.0, -1.0)
Aunque parte las hemos comentado en el artículo, es importante que recordemos lo siguiente:
Alignment
se utiliza en conjunto con otras clases como Align
o Stack
, si se desea alinear algo pero no se tiene un widget padre o un widget a posicionar sobre otro se deberá crear un widget temporal para poder utilizarlo.Alignment
puede ser usado en otras partes de la app no solo en widgets como mencioné en ejemplos anteriores, un ejemplo de esto es en el AnimatedContainer
para mover una caja de un punto a otro en la pantalla.En resumen, Alignment
es una herramienta importante y útil en Flutter para posicionar elementos en una aplicación y es fácil de usar y entender.
Recuerda que es solo una de las herramientas disponibles para lograrlo, existen muchas otras formas de posicionar elementos en una aplicación. Por eso es importante elegir la mejor opción para cada caso en particular.
Mira, cuanto mejor, más optimizado y más tasa de conversión consigas con tu logo, más instalaciones vas a tener y más dinero vas a ganar con esa app. Pues bien, basándonos en esto, hemos hecho para ti esta herramienta. Una herramienta que te va a permitir evaluar, optimizar y mejorar tu logo y espiar los logos de la competencia. No te espoileo más, entra en el enlace.
Y ahora ya si, me despido. Nos vemos en el siguiente artículo. Hasta entonces ¡que vaya bien!