Ce face Timer.periodic
Timer.periodic(durata, f) cheamă f după fiecare durata, la nesfârșit, până când chemi cancel(). Funcția primește chiar timer-ul, deci se poate opri singură.
tick spune câte intervale au trecut de la pornire. De obicei crește cu 1 la fiecare apel; dacă programul a fost ocupat și un apel a întârziat, tick poate sări peste valori, ca să rămână legat de timpul real.
Parametri
| Parametru | Descriere |
|---|---|
duration |
Intervalul dintre apeluri. |
callback |
Funcția chemată, care primește timer-ul. |
Ce returnează
Un Timer periodic.
Exemple
Exemplul 1: Numărătoare care se oprește singură
import 'dart:async';
Future<void> main() async {
final gata = Completer<void>();
Timer.periodic(const Duration(milliseconds: 30), (t) {
print('tick ${t.tick}: mai sunt ${3 - t.tick}');
if (t.tick == 3) {
t.cancel();
gata.complete();
}
});
await gata.future;
print('Start!');
}
Rezultat
tick 1: mai sunt 2
tick 2: mai sunt 1
tick 3: mai sunt 0
Start!
Exemplul 2: Salvare automată, oprită din afară
import 'dart:async';
Future<void> main() async {
var salvari = 0;
final autosalvare = Timer.periodic(const Duration(milliseconds: 20), (_) => salvari++);
await Future.delayed(const Duration(milliseconds: 110));
autosalvare.cancel();
print('Salvări făcute: cel puțin 3? ${salvari >= 3}');
print('Timer activ: ${autosalvare.isActive}');
}
Rezultat
Salvări făcute: cel puțin 3? true
Timer activ: false
Greșeli frecvente
- Uiți să oprești timer-ul periodic. Programul nu se mai termină, pentru că timer-ul ține bucla de evenimente ocupată.
Comenzi înrudite
Timer: Rulează o funcție o dată, după o durată dată; cancel îl oprește înainte, isActive spune dacă mai așteaptă.Stream.periodic: Creează un stream infinit care emite o valoare la fiecare interval de timp, calculată din numărul pasului.Timer.run: Rulează o funcție cât mai curând, ca eveniment nou, după codul curent și după microtask-uri (Timer cu durata zero).