encode method

String encode(
  1. List<List> data,
  2. CsvConfig config
)

Encode rows to CSV string with type-aware quoting.

Implementation

String encode(List<List<dynamic>> data, CsvConfig config) {
  if (data.isEmpty) return config.addBom ? '\uFEFF' : '';

  final buf = StringBuffer();
  if (config.addBom) buf.writeCharCode(0xFEFF);

  final delim = config.fieldDelimiter;
  final lineDelim = config.lineDelimiter;
  final quote = config.quoteCharacter;
  final escape = config.escapeCharacter;
  final mode = config.quoteMode;
  final transform = config.encoderTransform;

  for (var r = 0; r < data.length; r++) {
    final row = data[r];
    for (var c = 0; c < row.length; c++) {
      if (c > 0) buf.write(delim);
      var cell = row[c];
      if (transform != null) cell = transform(cell, c, null);
      _writeCell(buf, cell, delim, quote, escape, mode);
    }
    if (r < data.length - 1) buf.write(lineDelim);
  }

  return buf.toString();
}