Asincronismo en Dart

Este es el cuarto tutorial de la serie 'Mis apuntes Dart' en el cual nos adentraremos al lenguaje Dart desde lo más básico hasta conocer lo necesario para crear aplicaciones moviles con Flutter.

En este tutorial veremos aspectos relacionados al Asincronismo en Dart. Hablaremos de los Futures y de las funciones asincronas.

Índice

  1. Futures
  2. El asincronismo

1. Futures

Un Future es una tarea asincronica que se resuelva a destiempo. No es más que un tipo de dato en el que sabemos que se resolverá en un determinado tiempo, no de manera inmediata. Podemos usar un Future para pedir información a un servidor por ejemplo. Sabemos que nos entregará un resultado pero no sabemos cuando.

Asi que al ser un tipo de dato podemos hacer lo siguiente. Crear una función que nos devuelva un Future generico.

Future httpGet1(String url){
  // codigo
}

Para entenderlo mejor crearemos un método Future. Un método que demorará unos segundos en retornar su resultado.

Future<String> httpGet(String url){
  // El delayed hará que esperemos 4 segundos para devolvernos un mensaje.
    return Future.delayed(new Duration( seconds: 4), (){
    return 'Hola mundo';
  });
}

Este método devulve un Future osea algo por el que se tiene que esperar un tiempo, en este caso 4 segundos. Esto lo logramos gracias a un objeto Future, que nada tiene que ver con nuestra función, y su método delayed.

Entonces ya entendimos que es un Future. Ahora podemos usar un future como tipo de dato para cuando pedimos algo a un servidor por ejemplo.

2. El asincronismo

Resulta que este es un problema frecuente en la programación. Hacer una peticion a un servidor y esperar. Pero el flujo de un programa no se detiene este sigue. Imaginate que tienes una lista de datos que vienen de un servidor pero estos datos demoran 2 segundos en llegar pero para eso el programa ya termino hasta de renderizar la lista sin datos obviamente porque no llegaron a tiempo. Este es un proceso asincronico, no hay simultaneidad en las acciones. Por lo que el programa no cumple su función correctamente.

Entonces como logramos la sincronia en los datos. Que haga la peticion al servidor, espere obtenga los datos y recien renderice la información. Para esto usamos el async y el await.

Para este ejemplo usaremos la funcion hecha anteriormente que nos envia un mensaje con una espera de 4 segundos.

void main() async {
  print('Estamos a punto de pedir datos');
  String data = await httpGet('http://api.nada.com/aliens');
  print(data);
  print('Ultima linea');
}

Primero que nada el método debe ser marcado por un async para decir al compilador que se trata de una función asincrona. Entonces usamos el await para recibir el Future<string> y pedirle que el flujo se espere hasta recibir estos datos. Solo caundo reciba los datos el flujo normal continuará pero solo en esta función marcada con el async.

Importante Para hacer uso del await necesitas que la función donde se use necesariamente debe estar marcado con un async.

También es importante mensionar que no puedes hacer un constructor asyncrono.

Fin de este cuarto tutorial sobre fundamentos de Dart, Entonces ya estamos listos para desarrollar aplicaciones en Flutter. Asi que te invito a que mires los tutoriales de la serie 'Fundamentos de Flutter'.