Future.whenComplete în Dart

Rulează o funcție când future-ul se termină, fie cu succes, fie cu eroare (echivalentul lui finally).

Sintaxă
Future<T> whenComplete(FutureOr<void> action())

Ce face Future.whenComplete

whenComplete este pentru curățenie: închide o conexiune, ascunde un indicator de încărcare, scrie în jurnal. Funcția rulează în ambele cazuri și nu primește nici valoarea, nici eroarea.

Future-ul returnat are același rezultat ca originalul: valoarea trece mai departe, iar eroarea rămâne eroare. În codul cu await, echivalentul este blocul finally.

Parametri

Parametru Descriere
action Funcția de curățenie; dacă returnează un future, acesta este așteptat.

Ce returnează

Un Future<T> cu același rezultat ca originalul.

Exemple

Exemplul 1: Indicator de încărcare

Future<String> incarca(bool reuseste) async {
  await Future.delayed(const Duration(milliseconds: 10));
  if (!reuseste) throw Exception('conexiune pierdută');
  return 'date primite';
}

Future<void> main() async {
  for (final ok in [true, false]) {
    print('[se încarcă...]');
    try {
      final r = await incarca(ok).whenComplete(() => print('[gata încărcarea]'));
      print(r);
    } on Exception catch (e) {
      print('Eroare: $e');
    }
  }
}

Rezultat

[se încarcă...]
[gata încărcarea]
date primite
[se încarcă...]
[gata încărcarea]
Eroare: Exception: conexiune pierdută

Exemplul 2: Același lucru cu finally

Future<void> trimiteRaport() async {
  await Future.delayed(const Duration(milliseconds: 10));
  print('Raport trimis');
}

Future<void> main() async {
  try {
    await trimiteRaport();
  } finally {
    print('Conexiune închisă');
  }
}

Rezultat

Raport trimis
Conexiune închisă

Greșeli frecvente

  • Crezi că whenComplete prinde eroarea. Nu o prinde: eroarea continuă și trebuie tratată mai departe cu catchError sau try/catch.

Comenzi înrudite

  • Future.catchError: Prinde eroarea unui future și o înlocuiește cu o valoare de rezervă (echivalentul lui catch pentru lanțuri then).
  • Future.then: Înregistrează o funcție care primește valoarea future-ului când e gata și returnează un future nou cu rezultatul ei.
  • try, catch și finally: try prinde excepțiile din bloc; on alege tipul, catch dă acces la obiect, finally rulează mereu.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Future.whenComplete

Ai o nelămurire despre utilizarea comenzii Future.whenComplete sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.