Ce face StreamTransformer.fromBind
fromBind primește o funcție de la Stream<S> la Stream<T>. În ea poți folosi orice: where, map, distinct sau o funcție async* cu await for.
Este cel mai simplu mod de a da un nume unui lanț de transformări și de a-l refolosi cu stream.transform(...).
Parametri
| Parametru | Descriere |
|---|---|
bind |
Funcția care transformă stream-ul primit în stream-ul rezultat. |
Ce returnează
Un StreamTransformer<S, T>.
Exemple
Exemplul 1: Un lanț de transformări refolosibil
import 'dart:async';
final curataCuvinte = StreamTransformer<String, String>.fromBind(
(s) => s.map((c) => c.trim().toLowerCase()).where((c) => c.isNotEmpty).distinct(),
);
Future<void> main() async {
final intrare = Stream.fromIterable([' Iași', 'iași ', '', 'Cluj', ' CLUJ', 'Sibiu']);
print(await intrare.transform(curataCuvinte).toList());
}
Rezultat
[iași, cluj, sibiu]
Exemplul 2: Cu o funcție async*
import 'dart:async';
Stream<String> numeroteaza(Stream<String> linii) async* {
var i = 0;
await for (final l in linii) {
yield '${++i}. $l';
}
}
Future<void> main() async {
final numerotare = StreamTransformer<String, String>.fromBind(numeroteaza);
await Stream.fromIterable(['lapte', 'pâine', 'mere']).transform(numerotare).forEach(print);
}
Rezultat
1. lapte
2. pâine
3. mere
Greșeli frecvente
- Folosești
fromBindcând ai nevoie doar demap. Pentru o transformare simplă,stream.map(...)este mai clar.
Comenzi înrudite
StreamTransformer: Transformă un Stream<S> într-un Stream<T>; fromHandlers îl construiește din funcții pentru date, erori și final.Stream.transform: Trece stream-ul printr-un StreamTransformer, de exemplu utf8.decoder sau LineSplitter, și dă stream-ul rezultat.async*: O funcție async* produce un Stream: trimite valori cu yield, în timp, și poate folosi await între ele.