Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Flutter Ebook
Flutter Ebook
Nota: Siempre agregamos “;” después de cada línea de código que escribamos.
En este ejemplo, creamos una variable llamada "edad" de tipo entero y le asignamos el
valor 27 dentro de la función main(). Luego, utilizamos la función print() para imprimir el
valor de la variable en la consola.
Además de asignar valores a las variables en el momento de su creación, también es
posible cambiar su valor en cualquier momento durante la ejecución del programa. Por
ejemplo:
En este otro ejemplo, creamos una variable llamada mensaje de tipo String y le asignamos
el valor de "¡Hola, mundo!". Al ejecutar este código en Dart Pad, verás que se imprime
"¡Hola, mundo!" en la consola.
Es importante tener en cuenta que Dart es un lenguaje tipado fuerte, lo que significa que
no es posible asignar un valor de un tipo diferente al especificado en la creación de la
variable. Por ejemplo, si intentamos asignar un String a una variable de tipo int,
obtendremos un error.
Veamos ahora cómo crear listas en Dart, las cuáles necesitas entender para luego armar
tu aplicación.
En este ejemplo, creamos una lista llamada “numeros” que contiene los números enteros
del 1 al 5. La lista está definida como una lista de enteros utilizando el tipo List<int>.
Las listas son una colección de elementos ordenados. Estos elementos pueden ser
cualquier tipo de datos cómo enteros, strings, etc.
Para crear una lista, la creamos cómo cualquier otra variable, indicando el tipo de dato
List, y usando los corchetes []. Dentro de los corchetes agregamos nuestros elementos y
los separamos por comas.
Ahora que ya sabemos cómo crear y trabajar con variables en Dart, estamos listos para
profundizar en la creación de programas más avanzados.
En Dart, tenemos varios operadores que podemos usar en nuestras condiciones, como >
(mayor que), < (menor que), >= (mayor o igual que), <= (menor o igual que), == (igual a) y
!= (no igual a). Aquí hay un ejemplo de una estructura if que usa el operador !=
Además, podemos usar la estructura else if para comprobar múltiples condiciones. En este
ejemplo, se imprime "El número es negativo" si el número es negativo, "El número es
cero" si el número es cero y "El número es positivo" si el número es positivo:
Bucles: Repitiendo Tareas en Dart
¿Alguna vez has estado haciendo tareas repetitivas, como ordenar tu habitación o hacer
tareas del colegio? Seguro que has pensado en que sería genial tener un robot que hiciera
esas tareas por ti, ¿verdad? Pues bueno, los bucles en programación son un poco como
tener un robot que haga tareas repetitivas por ti.
En Dart, podemos usar los bucles for y while para repetir una acción varias veces.
El bucle for tiene la siguiente estructura:
En este caso, la variable de inicialización sería i de tipo int, mientras que la condición para
que el bucle siga corriendo es que la variable i sea menor o igual a 5. Finalmente, luego de
cada iteración, se aumenta el valor de i en 1.
Por otro lado, el bucle while tiene la siguiente estructura:
En un bucle while, la condición es la que se evalúa al comienzo de cada iteración y
determina si se debe seguir ejecutando o no.
En este caso, tenemos un bucle while que imprime los números del 1 al 5:
Ahora te estarás preguntando, ¿cuál es la diferencia entre un loop for y un bucle while?
En pocas palabras, el bucle for es útil cuando sabemos cuántas veces queremos repetir
una determinada acción, mientras que el bucle while es adecuado cuando queremos
repetir la acción mientras se cumpla cierta condición.
Como vemos, el Container tiene propiedades de width (ancho), height (altura), y child
vendría siendo el hijo.
En este caso, el Container es el padre del Text, y el Text es el hijo del Container.
Tu Primera Aplicación
Si aún no has creado un proyecto en Flutter, necesito que lo hagas, porque estamos a
punto de crear tu primera aplicación móvil, y lo vas a conseguir en menos de 5 minutos.
Apenas crees un nuevo proyecto en Flutter, se te debe haber creado una carpeta llamada
lib, dentro de la cual hay un archivo llamado main.dart.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
Ahora ese código que acabas de copiar, pégalo en el main.dart, y corre la aplicación.
Una vez que corras la aplicación en tu emulador, o donde sea que lo hayas corrido,
debería verse así:
Ahora, para entender el código, digámosle a nuestro querido ChatGPT que lo explique,
que de verdad, lo hace mucho mejor que yo.
Te recomiendo que vayas mirando el código a medida que vas leyendo la explicación.
ChatGPT, haz lo tuyo:
En este ejemplo, se crea un widget "MyApp" que es un “StatelessWidget”. El widget utiliza
el método "build" para construir la interfaz de usuario. Se utiliza un “MaterialApp” como
widget padre para proporcionar una estructura básica para la aplicación, y se le pasa un
título y un widget "Scaffold" como hijo.
El widget "Scaffold" se utiliza como un widget padre que envuelve un “AppBar” y un
"Center" que muestra el mensaje "¡Hola mundo!". El AppBar proporciona una barra de
navegación en la parte superior de la pantalla, mientras que el Center se utiliza para
centrar el texto en la pantalla.
Hola, soy yo de nuevo. Y me gustaría aclarar algunas cosas.
Primero, un StatelessWidget no es más que un tipo de widget que no cambia nunca. Es
decir, siempre se mantendrá exactamente igual.
Por otro lado, un método es una función. (No me maten programadores).
Y bueno, adivina quién acaba de crear su primera aplicación.
¡Tú!
Épico.
Ahora te reto a cambiar el texto del centro, y el texto que sale en la appbar.
¿Más Widgets?
Sigamos aprendiendo más sobre widgets, para que puedas crear aplicaciones más
complejas y personalizadas.
Como ya vimos, los widgets son los bloques de Lego que nos permiten construir nuestras
aplicaciones. Estos widgets se dividen en dos tipos: StatelessWidget y StatefulWidget.
Un StatelessWidget es un widget que no cambia ni su aspecto ni su comportamiento
después de haberse creado. Se suele utilizar para crear interfaces que no requieren
cambios de estado, como mostrar texto o imágenes estáticas.
Por otro lado, un StatefulWidget es un widget que puede cambiar su aspecto y/o
comportamiento después de haberse creado. Se utiliza para crear aplicaciones dinámicas
que requieren cambios, como botones que actualicen una variable, animaciones, etc.
En el último ejemplo utilizamos un StatelessWidget, así que ahora vamos a centrarnos en
los StatefulWidget.
Cuando creas un nuevo StatefulWidget, se crean dos clases. En este ejemplo, le di el
nombre de “WidgetDinamico” al StatefulWidget:
Ahora vamos a agregar un nuevo widget llamado Column, el cual sirve para ordenar los
widget dentro de ella de manera vertical. Modificamos la clase State, y el código quedaría
así:
import 'package:flutter/material.dart';
void main() {
runApp(WidgetDinamico());
}
Es importante que veas que el widget Column, recibe el parámetro children (el cual es una
lista de widgets, por eso se ponen entre corchetes []), lo que hace que Column tenga más
de un solo hijo. En el ejemplo que acabamos de ver, Column tiene 3 hijos, que vendrían
siendo los 3 textos.
Y en el emulador, esto se ve así:
Los textos se ven muy pequeños, así que con el parámetro style, le otorgaremos un
TextStyle a cada texto, y cambiaremos el tamaño de la fuente con fontSize:
Démosle ahora una función a este botón. Hagamos que el botón imprima en la consola
cada vez que le hacemos click. Para eso, dentro de la función de onPressed, usamos la
función print:
ElevatedButton(
onPressed: () {
print("hiciste click");
},
child: Text("Click"))
En este capítulo vamos a estar creando la siguiente aplicación, que es similar a la interfaz de perfil
de Instagram.
Vamos a ir paso a paso, para que entiendas todo el código que escribas.
Te recomiendo que en cada paso, guardes el código, y veas cómo la aplicación va tomando
forma.
Empecemos.
1. Lo primero que tenemos que hacer, es crear un nuevo proyecto. Si ya creaste uno,
simplemente abre el archivo “lib/main.dart”, y elimina todo el código generado
automáticamente.
import 'package:flutter/material.dart';
import 'instagram_user_page.dart';
void main() {
runApp(MyApp());
}
import 'package:flutter/material.dart';
return Scaffold(
body: CustomScrollView(
slivers: <Widget>[
// ...
],
),
);
SliverAppBar(
title: Text('Username'),
actions: <Widget>[
IconButton(
icon: Icon(Icons.menu),
onPressed: () {},
),
],
floating: true,
pinned: true,
snap: false,
expandedHeight: 250,
flexibleSpace: FlexibleSpaceBar(
background: Image.network(
'https://picsum.photos/seed/picsum/500/500',
fit: BoxFit.cover,
),
),
),
En este código le ponemos el título de “Username” a nuestra SliverAppBar.
También agregamos un botón de menú en la esquina superior derecha con el
widget IconButton. Seteamos los parámetros “floating” y “pinned” en true, lo que
hará que la SliverAppBar se deslice junto con el contenido, y se mantenga fija en la
parte de superior de la pantalla.
Establecemos el “expandedHeight” en 250, lo que hará que la appbar sea más alta
de lo normal. También agregamos un “FlexibleSpaceBar” que contiene una imagen
de fondo.
SliverList(
delegate: SliverChildListDelegate([
// ...
]),
),
7. Dentro de la lista que acabamos de crear (con lista me refiero a los corchetes [] ),
agregamos un Container (básicamente una caja invisible).
Container(
margin: EdgeInsets.all(20),
//...
),
8. A este Container, le agregamos una Column como hijo. Recuerda que una Column
nos permite crear una columna vertical de widgets.
Container(
margin: EdgeInsets.all(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
// ...
],
),
),
9. Agregamos un Text widget dentro del Column para mostrar el nombre de usuario.
Text(
'Username',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18,
),
),
10. Dentro de la misma Column, agregamos un SizedBox widget, que sirve para
agregar un pequeño espacio entre el nombre de usuario y la biografía.
SizedBox(height: 5),
En este caso, establecemos la altura de la caja en 5 píxeles.
11. Seguido de la SizedBox, añadimos otro Text para mostrar la biografía del usuario.
Text(
'User bio',
style: TextStyle(
color: Colors.grey,
),
),
En este código, establecemos el texto como "User bio" y le ponemos un color gris
claro.
12. Seguido del último texto, agregamos otro SizedBox para agregar un espacio antes
de la siguiente sección.
SizedBox(height: 20),
13. Después de la SizedBox, agregamos una Row (fila), la cual nos va a permitir
ordenar el número de publicaciones, seguidores, y seguidos, de forma horizontal.
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
// ...
],
),
14. Ahora, afírmate bien, que vamos a escribir mucho código, pero no te preocupes,
que con esto casi terminamos.
Dentro de la lista children de la Row que acabamos de crear, vamos a crear tres
elementos para mostrar los seguidores, los seguidos y el número de publicaciones.
Para cada una de estas estadísticas, vamos a agregar una Row, que contiene dos
Text: uno para mostrar la etiqueta del texto como “Posts”, “Followers” o
“Following”, y otro que muestra el número correspondiente. Para agregar un
espacio entre la etiqueta y el número, se usa una SizedBox con un ancho de 10.
Lee este código con calma, y si es necesario, vuelve a leer el párrafo de arriba.
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
// Fila de Posts
Row(
children: <Widget>[
// Texto etiqueta de “Posts”
Text(
'Posts',
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
//Caja de ancho 10
SizedBox(
width: 10,
),
// Text para mostrar el número de Posts
Text(
'999',
style: TextStyle(
fontSize: 16,
),
),
],
),
//Fila de Followers
Row(
children: <Widget>[
Text(
'Followers',
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
SizedBox(
width: 10,
),
Text(
'999',
style: TextStyle(
fontSize: 16,
),
),
],
),
// Fila de Following
Row(
children: <Widget>[
Text(
'Following',
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
SizedBox(
width: 10,
),
Text(
'999',
style: TextStyle(
fontSize: 16,
),
),
],
),
],
),
15. Seguido de esas tres filas, agregamos una SizedBox para ganar espacio, y
agregamos un botón de seguir.
SizedBox(height: 20),
ElevatedButton(
child: Text('Follow'),
onPressed: () {},
),
16. Ahora solo nos falta mostrar las fotos en el perfil, para esto, agregamos un
GridView, fuera de la Column donde pusimos el botón de seguir, pero dentro de
los children de la SliverList.
GridView.count(
shrinkWrap: true,
crossAxisCount: 3,
mainAxisSpacing: 2,
crossAxisSpacing: 2,
children: List.generate(9, (index) {
return Image.network(
'https://picsum.photos/id/$index/300/300',
fit: BoxFit.cover,
);
}),
),
Y finalmente, después de seguir todos esos pasos, tu aplicación debería quedar así:
El código completo:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
¿Y ahora qué?
Ahora mi querido aprendiz, es momento de que sigas tu camino por tu cuenta.
Nah es broma.
No te voy a dejar solo.
Quiero guiarte para que sigas aumentando tu conocimiento.
Por eso te sugiero que estés atento a tu correo, donde te voy a estar compartiendo mucha
más información para acompañarte en tu camino.
Aún queda mucho por aprender.
Espero pronto poder enseñarte a cómo monetizar tu aplicación, y a generar ingresos de
tus creaciones.
Porque oye, no empezaste a crear aplicaciones porque sí.
Por lo menos yo no.
Pero bueno, como te dije, estate atento a tu correo.
Nos vemos.