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
sleepdindart:ioîntr-un program asincron.sleepblochează tot; foloseșteFuture.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.