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 umaStreamcom as letras 'a', 'b' e 'c'. - Para cada letra,
asyncExpandchamaduplicarLetra(), que também retorna umaStream. - O resultado é uma
Streamachatada com todos os eventos emitidos pelasStreams resultantes.