
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:
- Pendiente: El
Future
está en progreso y el valor aún no está disponible. - 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';
});
}