flatMap method
Flattens a nested map into a single-level map.
- By default, flattens arrays (with '0', '1', etc. keys).
- Handles circular references to prevent infinite loops.
- Customizable:
delimiter: Adjusts how nested keys are separated.excludeArrays: Prevents flattening of arrays.
Implementation
Map<String, Object?> flatMap({
String delimiter = '.',
bool excludeArrays = false,
}) {
final result = <String, Object?>{};
final visited = HashSet<Object>.identity();
void flattenAny(Object? value, String key) {
if (value is Map) {
if (!visited.add(value)) return;
value.forEach((k, v) {
final childKey = k.toString();
flattenAny(v, '$key$delimiter$childKey');
});
return;
}
if (value is List && !excludeArrays) {
if (!visited.add(value)) return;
for (var i = 0; i < value.length; i++) {
flattenAny(value[i], '$key$delimiter$i');
}
return;
}
result[key] = value;
}
forEach((k, v) => flattenAny(v, k));
return result;
}