StreamTransformer.fromBind în Dart

Creează un transformator dintr-o funcție care primește tot stream-ul și returnează stream-ul nou.

Sintaxă
factory StreamTransformer.fromBind(Stream<T> Function(Stream<S>) bind)

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 fromBind când ai nevoie doar de map. 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.