Jenner Acosta Diaz
Dart Website

Futures

En Dart, un Future es un objeto que representa un valor que puede estar disponible en el futuro. Un Future se utiliza para manejar operaciones asíncronas y permite ejecutar código de manera no bloqueante mientras se espera la finalización de una operación.

Un Future puede tener dos estados:

  1. Pendiente: El Future está en progreso y el valor aún no está disponible.
  2. Completado: El Future ha terminado y el valor está disponible.

Puedes crear un Future utilizando el constructor Future, y puedes encadenar operaciones asíncronas utilizando métodos como then(), catchError() y whenComplete().

Future<String> obtenerInformacion() {
  return Future.delayed(Duration(seconds: 2), () => 'Información obtenida');
}

void main() {
  print('Inicio');

  obtenerInformacion().then((resultado) {
    print(resultado); // Imprime "Información obtenida" después de 2 segundos
  }).catchError((error) {
    print('Error: $error');
  }).whenComplete(() {
    print('Fin');
  });
}

En el ejemplo anterior, la función obtenerInformacion() devuelve un Future que se completará después de 2 segundos con el valor ‘Información obtenida’. El método Future.delayed() se utiliza para simular una operación asíncrona que toma tiempo.

En la función main(), se llama a la función obtenerInformacion() y se encadena el método then() para manejar el resultado exitoso del Future. Dentro del bloque then(), se imprime el resultado obtenido.

Si ocurre un error durante la ejecución del Future, se puede manejar utilizando el método catchError().

El método whenComplete() se utiliza para especificar una acción que se realizará independientemente de si el Future se completa correctamente o con error.

En este ejemplo, se imprimirá «Inicio», después de 2 segundos se imprimirá «Información obtenida» y finalmente se imprimirá «Fin».

Los Futures son fundamentales para manejar operaciones asíncronas en Dart y permiten escribir código más eficiente y no bloqueante. Pueden ser utilizados para operaciones como solicitudes HTTP, lectura y escritura de archivos, acceso a bases de datos y más.

Ejercicio de la Sesión

void main(){
  print('Inicio del programa');
  
  httpGet('https:://jenner.pe')
    .then((value){
      print( value );
    })
    .catchError( (err){
      print('Error: $err');
    });
  
  print('Fin del programa');
}

Future<String> httpGet( String url){
  return Future.delayed( Duration(seconds: 1), () {
    throw 'Error en la petición http';
//     return 'Respuesta de la petición http';
    
  });
}