Ce face Completer.complete
complete(valoare) termină completer.future cu valoarea dată. completeError(eroare) îl termină cu o eroare, care va fi aruncată la await.
Un completer se poate termina o singură dată. isCompleted devine true după primul complete sau completeError; un al doilea apel aruncă StateError.
Parametri
| Parametru | Descriere |
|---|---|
value |
Valoarea cu care se termină future-ul. |
error / stackTrace |
Eroarea și, opțional, stiva de apeluri. |
Ce returnează
complete și completeError nu returnează nimic; isCompleted returnează bool.
Exemple
Exemplul 1: Succes sau eroare
import 'dart:async';
Future<int> verificaPin(String pin) {
final c = Completer<int>();
Timer(const Duration(milliseconds: 10), () {
if (pin == '1234') {
c.complete(500);
} else {
c.completeError(StateError('PIN greșit'));
}
});
return c.future;
}
Future<void> main() async {
for (final pin in ['1234', '0000']) {
try {
print('Sold: ${await verificaPin(pin)} lei');
} on StateError catch (e) {
print('Eroare: ${e.message}');
}
}
}
Rezultat
Sold: 500 lei
Eroare: PIN greșit
Exemplul 2: isCompleted și al doilea complete
import 'dart:async';
Future<void> main() async {
final c = Completer<String>();
print('înainte: ${c.isCompleted}');
c.complete('primul');
print('după: ${c.isCompleted}');
try {
c.complete('al doilea');
} on StateError catch (e) {
print('Eroare: ${e.message}');
}
print(await c.future);
}
Rezultat
înainte: false
după: true
Eroare: Future already completed
primul
Greșeli frecvente
- Chemi
completeErrorși nimeni nu așteaptăfuture. Eroarea devine netratată și oprește programul.
Comenzi înrudite
Completer: Creează un Future pe care îl termini tu, manual, mai târziu; leagă codul cu callback-uri de codul cu await.Completer.sync: Completer care anunță ascultătorii imediat, în timpul apelului complete, nu mai târziu.Future.value: Future.value creează un future deja terminat cu o valoare, iar Future.error unul terminat cu o eroare.