flattened

Aplana iterables anidados hasta la profundidad indicada — las cadenas se dejan intactas.

Iterable<dynamic> flattened(Iterable<dynamic> iterable, [int depth = 1]) FxAsyncIterable<dynamic> flattenedAsync(FxAsyncIterable<dynamic> iterable, [int depth = 1]) Fx<dynamic> Fx.flattened([int depth = 1]) // chain FxAsync<dynamic> FxAsync.flattened([int depth = 1]) Iterable<dynamic> flat(...) // FxTS alias

Lección

flattened recorre una estructura anidada de iterables e inserta los elementos interiores en la secuencia exterior, hasta depth niveles de profundidad (por defecto 1). Todo lo que sea un Iterable cuenta como «aplanable» excepto String — así que flattened(['ab', ['cd']]) conserva 'ab' entero en vez de descomponerlo en caracteres. flattened es el nombre idiomático en Dart; fxdart también acepta la grafía flat de FxTS: son el mismo operador.

Por qué Iterable<dynamic>, y por qué no pasa nada: el flat de TypeScript tiene un tipo condicional DeepFlat capaz de describir «el tipo del elemento tras aplanar N niveles». El sistema de tipos de Dart no tiene un mecanismo equivalente — la forma del anidamiento de la entrada no se conoce hasta tiempo de ejecución, así que no hay manera sólida de calcular un tipo de elemento estático. En lugar de mentir con un genérico que no se sostiene, el port a Dart es honesto y devuelve Iterable<dynamic>. Si conoces la forma de lo que estás aplanando y quieres un resultado tipado, tira de flatMap en su lugar: flatMap((row) => row, matrix) te da un aplanado tipado para datos de exactamente un nivel y forma uniforme.

Igual que flat en FxTS, flattenedAsync solo baja por el anidamiento que ya sea, de forma síncrona, un Iterable en el momento en que llega — no espera a un Future escondido dentro de una colección anidada. Combínalo con una etapa previa .map(...).concurrent(n) para traer las listas anidadas en paralelo, y deja que .flattened() junte después los resultados ya resueltos.

Demo 1 · Fundamentos & profundidad

Demo 2 · Asíncrono, con concurrencia

Trae los resultados (ya anidados) de forma concurrente y luego aplana las listas resueltas:

Pruébalo tú

Ejercicio: usa flattened() para aplanar scoreGroups un nivel.

Relacionado: flatMap — map + aplanado tipado en un solo paso · map — transforma sin aplanar · scan — acumulación progresiva · concurrent — evaluación en paralelo