Ce face Stream.cast
cast<R>() nu schimbă valorile, ci doar tipul declarat al stream-ului. Când sosește o valoare, se verifică dacă este de tip R; dacă nu, stream-ul emite o eroare de tip.
Este util când primești un Stream<dynamic> sau Stream<Object?> despre care știi că are doar valori de un anumit tip. Dacă stream-ul are tipuri amestecate și vrei doar unele, filtrează întâi cu where((e) => e is R).
Ce returnează
Un Stream<R>.
Exemple
Exemplul 1: Din dynamic în String
Future<void> main() async {
final Stream<dynamic> brut = Stream.fromIterable(<dynamic>['Iași', 'Cluj']);
final Stream<String> orase = brut.cast<String>();
await for (final o in orase) {
print('${o.toUpperCase()} are ${o.length} litere');
}
}
Rezultat
IAȘI are 4 litere
CLUJ are 4 litere
Exemplul 2: Filtrare apoi cast
Future<void> main() async {
final amestecat = Stream<Object>.fromIterable([1, 'doi', 3, 'patru', 5]);
final numere = amestecat.where((e) => e is int).cast<int>();
print('Suma numerelor: ${await numere.fold<int>(0, (a, b) => a + b)}');
}
Rezultat
Suma numerelor: 9
Greșeli frecvente
- Folosești
castpe un stream cu tipuri amestecate. Prima valoare de alt tip produce o eroare de tip; filtrează întâi.
Comenzi înrudite
Iterable.cast: Privește elementele ca fiind de alt tip; fiecare element este verificat abia când este citit.Stream.where: Creează un stream nou care lasă să treacă doar valorile pentru care testul este adevărat.as: Spune că o valoare are un anumit tip (cast); dacă nu are, aruncă TypeError. Tot as dă un prefix unui import.