Ce face Future.value
Future.value(x) este un future gata făcut cu valoarea x. Îl folosești când o funcție trebuie să returneze Future, dar ai deja rezultatul (de exemplu din cache), sau în teste.
Future.error(e) este un future terminat cu eroarea e. Când îl aștepți, eroarea este aruncată. Ascultătorii lor rulează tot asincron, nu imediat.
Parametri
| Parametru | Descriere |
|---|---|
value |
Valoarea future-ului (poate fi chiar un alt future). |
error / stackTrace |
Eroarea și, opțional, stiva de apeluri. |
Ce returnează
Un Future<T> terminat.
Exemple
Exemplul 1: Cache: valoarea există deja
final cache = <String, String>{'IS': 'Iași'};
Future<String> numeJudet(String cod) {
final dinCache = cache[cod];
if (dinCache != null) return Future.value(dinCache);
return Future.delayed(const Duration(milliseconds: 10), () {
print(' (citit de pe server)');
return cache[cod] = 'Cluj';
});
}
Future<void> main() async {
print(await numeJudet('IS'));
print(await numeJudet('CJ'));
print(await numeJudet('CJ'));
}
Rezultat
Iași
(citit de pe server)
Cluj
Cluj
Exemplul 2: Future.error într-o funcție fără async
Future<int> imparte(int a, int b) {
if (b == 0) return Future.error(ArgumentError('împărțire la zero'));
return Future.value(a ~/ b);
}
Future<void> main() async {
print(await imparte(10, 3));
try {
await imparte(5, 0);
} on ArgumentError catch (e) {
print('Eroare: ${e.message}');
}
}
Rezultat
3
Eroare: împărțire la zero
Greșeli frecvente
- Creezi un
Future.errorși nu îl aștepți și nu îl tratezi. Eroarea devine netratată și oprește programul. - Crezi că
thenpe unFuture.valuerulează imediat. Rulează tot după codul sincron curent.
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.Future.sync: Future.sync rulează funcția imediat și pune rezultatul într-un future; Future.microtask o rulează ca microtask.Completer: Creează un Future pe care îl termini tu, manual, mai târziu; leagă codul cu callback-uri de codul cu await.Stream.value: Stream-uri gata făcute: unul cu o singură valoare, unul cu o singură eroare și unul gol.