Skip to main content

AsyncExpand | Dart

No Dart, o asynExpand é um método usado em Streams para transformar eventos de uma Stream original em outras Streams assincronamente. Ele é útil quando você precisa processar cada evento da Stream inicial com uma função que retorna uma nova Stream, e quer "achatar" todas essas Streams resultantes em uma única Stream.

Sintaxe:

Stream<T> asyncExpand<T>(Stream<T> convert(T event));

Exemplo prático:

Stream<String> letras() async* {
yield 'a';
yield 'b';
yield 'c';
}

Stream<String> duplicarLetra(String letra) async* {
yield letra;
await Future.delayed(Duration(milliseconds: 100));
yield letra.toUpperCase();
}

void main() async {
await for (var item in letras().asyncExpand(duplicarLetra)) {
print(item);
}
}

Saída:

a
A
b
B
c
C

Explicação:

  • A letras() gera uma Stream com as letras 'a', 'b' e 'c'.
  • Para cada letra, asyncExpand chama duplicarLetra(), que também retorna uma Stream.
  • O resultado é uma Stream achatada com todos os eventos emitidos pelas Streams resultantes.