toCsvFromMaps static method

String toCsvFromMaps(
  1. List<Map<String, dynamic>> maps, {
  2. List<TCsvColumn>? columns,
  3. List<String>? headers,
  4. String delimiter = ',',
})

Converts a list of Maps to a CSV / TSV / DSV formatted string with custom delimiter.

Implementation

static String toCsvFromMaps(
  List<Map<String, dynamic>> maps, {
  List<TCsvColumn>? columns,
  List<String>? headers,
  String delimiter = ',',
}) {
  if (maps.isEmpty) return '';

  final resolvedHeaders = headers ?? columns?.map((c) => c.header).toList() ?? maps.first.keys.toList();

  final keys = columns?.map((c) => c.key).toList() ?? headers ?? maps.first.keys.toList();

  final rows = maps.map((map) {
    return keys.map((k) {
      final val = map[k];
      if (columns != null) {
        final col = columns.firstWhere(
          (c) => c.key == k,
          orElse: () => TCsvColumn.text(key: k, header: k),
        );
        return col.formatValue(val);
      }
      return val?.toString() ?? '';
    }).toList();
  }).toList();

  return toCsv(resolvedHeaders, rows, delimiter: delimiter);
}