Ce face Timer
Timer(durata, f) programează funcția f să ruleze o singură dată, după durata. Programul nu se oprește în timpul așteptării: codul de după merge mai departe, iar funcția rulează din bucla de evenimente.
cancel() anulează un timer care nu a rulat încă (sau oprește unul periodic). isActive este true cât timp timer-ul încă așteaptă; după ce a rulat sau a fost anulat devine false.
Diferența față de Future.delayed: timer-ul poate fi anulat, dar nu dă un future pe care să-l aștepți.
Parametri
| Parametru | Descriere |
|---|---|
duration |
După cât timp rulează funcția. |
callback |
Funcția rulată. |
Ce returnează
Un obiect Timer.
Exemple
Exemplul 1: Mesaj întârziat și isActive
import 'dart:async';
Future<void> main() async {
final t = Timer(const Duration(milliseconds: 50), () => print('Cafeaua este gata!'));
print('Am pornit espressorul, activ: ${t.isActive}');
await Future.delayed(const Duration(milliseconds: 100));
print('După: activ = ${t.isActive}');
}
Rezultat
Am pornit espressorul, activ: true
Cafeaua este gata!
După: activ = false
Exemplul 2: Căutare cu întârziere (debounce)
Fiecare literă nouă anulează timer-ul anterior; căutarea pornește doar după ce utilizatorul s-a oprit din scris.
import 'dart:async';
Timer? _cautare;
void laTastare(String text) {
_cautare?.cancel();
_cautare = Timer(const Duration(milliseconds: 40), () => print('Caut: "$text"'));
}
Future<void> main() async {
for (final text in ['I', 'Ia', 'Ias', 'Iasi']) {
laTastare(text);
await Future.delayed(const Duration(milliseconds: 10));
}
await Future.delayed(const Duration(milliseconds: 100));
print('Activ după căutare: ${_cautare!.isActive}');
}
Rezultat
Caut: "Iasi"
Activ după căutare: false
Greșeli frecvente
- Crezi că
Timerblochează programul. Nu blochează; funcția rulează mai târziu, iarmainpoate termina înainte dacă nu mai așteaptă nimic. - Pierzi referința la timer și nu-l mai poți anula. Păstrează-l într-o variabilă dacă s-ar putea să trebuiască oprit.
Comenzi înrudite
Timer.periodic: Rulează o funcție la fiecare interval de timp, până la cancel; tick numără câte intervale au trecut.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).Future.delayed: Creează un future care se termină după o durată dată, opțional cu valoarea unei funcții; pauza asincronă din Dart.Stream.periodic: Creează un stream infinit care emite o valoare la fiecare interval de timp, calculată din numărul pasului.