flatMap method

Map<String, Object?> flatMap({
  1. String delimiter = '.',
  2. bool excludeArrays = false,
})

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;
}