Future.delayed în Dart

Creează un future care se termină după o durată dată, opțional cu valoarea unei funcții; pauza asincronă din Dart.

Sintaxă
factory Future<T>.delayed(Duration duration, [FutureOr<T> computation()?])

Ce face Future.delayed

await Future.delayed(Duration(seconds: 1)) face o pauză de o secundă fără să blocheze programul: alte operații asincrone pot rula între timp. Dart nu are un sleep asincron; aceasta este varianta obișnuită.

Dacă dai și o funcție, aceasta rulează după pauză, iar rezultatul ei devine valoarea future-ului. Este foarte folosit pentru a simula operații lente în exemple și teste.

Parametri

Parametru Descriere
duration Cât durează pauza.
computation Opțional: funcția rulată la final; valoarea ei devine rezultatul.

Ce returnează

Un Future<T> (fără funcție, valoarea este null).

Exemple

Exemplul 1: Numărătoare inversă

Future<void> main() async {
  for (var i = 3; i > 0; i--) {
    print('$i...');
    await Future.delayed(const Duration(milliseconds: 100));
  }
  print('Start!');
}

Rezultat

3...
2...
1...
Start!

Exemplul 2: Valoare calculată după pauză

Future<void> main() async {
  final ceas = Stopwatch()..start();
  final meteo = await Future.delayed(const Duration(milliseconds: 150), () => 'Iași: 23 °C, însorit');
  print(meteo);
  print('A durat cel puțin 150 ms: ${ceas.elapsedMilliseconds >= 150}');
}

Rezultat

Iași: 23 °C, însorit
A durat cel puțin 150 ms: true

Greșeli frecvente

  • Scrii Future.delayed(...) fără await și te aștepți la o pauză. Codul merge mai departe imediat.
  • Folosești sleep din dart:io într-un program asincron. sleep blochează tot; folosește Future.delayed.

Comenzi înrudite

  • Future: O valoare care va fi gata mai târziu (citirea unui fișier, un răspuns de la server); o aștepți cu await.
  • Timer: Rulează o funcție o dată, după o durată dată; cancel îl oprește înainte, isActive spune dacă mai așteaptă.
  • Future.timeout: Limitează cât aștepți un future: după timpul dat, aruncă TimeoutException sau folosește onTimeout.
  • Stream.periodic: Creează un stream infinit care emite o valoare la fiecare interval de timp, calculată din numărul pasului.