Avec Dart 2.3 ou une version ultérieure, vous pouvez utiliser collection- for
et l'opérateur spread pour aplatir facilement une liste. Je trouve personnellement que c'est plus lisible que d'utiliser Iterable.expand
:
List<T> flatten<T>(Iterable<Iterable<T>> list) =>
[for (var sublist in list) ...sublist];
var a = [[1, 2, 3], ['a', 'b', 'c'], [true, false, true]];
var b = flatten(a);
print(b); // Prints: [1, 2, 3, a, b, c, true, false, true]
S'il y a des listes imbriquées que vous devez aplatir récursivement, vous pouvez utiliser :
List<T> flattenDeep<T>(Iterable<dynamic> list) => [
for (var element in list)
if (element is! Iterable) element else ...flattenDeep(element),
];
var a = [[1, [[2], 3]], [[['a']], 'b', 'c'], [true, false, [true]]];
var b = flattenDeep(a);
print(b) // Prints: [1, 2, 3, a, b, c, true, false, true]