Te recomendamos que pruebes esta respuesta en un entorno controlado antes de pasarlo a producción, saludos.
Solución:
Un par de diferencias para mí.
Future.of
devuelve un futuro.Timer
no devuelve nada.
Entonces si tu código retrasado devuelve todo lo que necesita para continuar con su trabajo, Future
es el camino a seguir.
Otra diferencia es que el Timer
La clase proporciona una forma de disparar repetidamente.
Esta cita es de la propia documentación de referencia de clase de temporizador
Un temporizador de cuenta regresiva que se puede configurar para disparar una vez o repetidamente
Y ejemplo a utilizar Timer
con el repetir podría ser
Timer.periodic(Duration(seconds: 5), (timer)
print(DateTime.now());
);
Otro ejemplo frecuente es crear un cronógrafopara medir los tiempos en su código, generalmente se ve usando un Timer
.
GL!!
Temporizador:
Timer()
crea un Timer
objeto, que ejecuta su cálculo después de un retraso. Ya que obtienes la referencia a eso Timer
objeto, puede optar por cancelarlo antes de que se dispare, llamando cancel
.
Timer t = Timer(Duration(seconds: 1), () => print("1 sec later"));
t.cancel(); // nothing will be printed out
Futuro:
Future.delayed
crea un Future
que ejecuta su cálculo después de un retraso. Internamente, todavía está usando un Timer
Para hacer eso. No te expone el temporizador, por lo que no puedes controlarlo ni cancelarlo. En el lado positivo, puedes hacer tus cosas normales de Future, como await
en eso.
await Future.delayed(Duration(seconds: 1);
print("1 sec later");
Utilice el temporizador si:
-
Desea la posibilidad de cancelarlo. Con
Timer.cancel()
cancelas el temporizador a diferencia deFuture
donde tendrás que hacer uso deCancelableCompleter
para cancelar el Futuro. -
Si no desea devolver nada en su método de devolución de llamada.
Ejemplo:
// Prints 'Hello' after 1s. var timer = Timer(Duration(seconds: 1), () => print('Hello'));
Y en caso de que decidas cancelarlo, usa:
timer.cancel();
Use Futuro si:
-
Su código puede arrojar errores y desea detectarlos. ¿Habías usado
Timer
y se produce alguna excepción no detectada, la aplicación se cerrará. -
Desea devolver algo desde su método de devolución de llamada.
Ejemplo:
// Return 'Hello' after 1s and if there is any error, it will be caught. Future .delayed(Duration(seconds: 1), () => 'Hello') .catchError((err) );
Reseñas y calificaciones de la guía
Más adelante puedes encontrar las explicaciones de otros creadores, tú todavía tienes el poder mostrar el tuyo si dominas el tema.