Sesión 3 · Asincronía y primera app¶
Tras ver Future, async/await y crear la primera app.
R17¶
La cafetera. Función prepararCafe() que devuelve un Future<String> y tarda 3 s. En main: muestra Enciendo la cafetera, espera el café y muestra ¡Café listo!.
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
Future<String> prepararCafe() async {
await Future.delayed(const Duration(seconds: 3));
return 'Café';
}
Future<void> main() async {
// ... (resto de la solución bloqueado)R18¶
Adivina el orden. Sin ejecutarlo, escribe qué imprime este código y explica por qué:
Future<void> main() async {
print('A');
Future.delayed(Duration.zero, () => print('B'));
print('C');
await Future.delayed(const Duration(milliseconds: 10));
print('D');
}
R19¶
Tres descargas. Tres tareas que tardan 1, 2 y 3 s. Mide el tiempo pidiéndolas una detrás de otra y después todas a la vez.
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
Future<String> descargar(String nombre, int segundos) =>
Future.delayed(Duration(seconds: segundos), () => nombre);
Future<void> main() async {
// Una detrás de otra
var reloj = Stopwatch()..start();
// ... (resto de la solución bloqueado)R20¶
División peligrosa. Función asíncrona dividir(a, b) que tarda 1 s y lanza una excepción si b es 0. Captúrala con try/catch.
R21¶
Cuenta atrás. Un Stream<int> con async* que cuente de 10 a 0 cada medio segundo. Consúmelo con await for mostrando solo los pares.
R22¶
Contador que resta. En hola_mundo, añade un segundo botón que reste y haz que el número se ponga en rojo cuando sea negativo. Usa solo hot reload.