toCsv static method

Future<String> toCsv(
  1. Data data
)

Implementation

static Future<String> toCsv(Data data) async
{
    final buffer = StringBuffer();
    String string = "";

    int i = 0;
    try
    {
      // Build Header
      List<String> header = [];
      List<String> columns = [];
      if (data.isNotEmpty)
      if (data.first is Map)
      (data.first as Map).forEach((key, value)
      {
        columns.add(key);
        String h = key.toString();
        h.replaceAll('"', '""');
        h = h.contains(',') ? '"' + h + '"' : h;
        header.add(h);
      });

      // Output Header
      buffer.write(header.join(", ") + '\n');

      // Output Data
      if (columns.isNotEmpty)
      data.forEach((map)
      {
        i++;
        List<String> row = [];
        columns.forEach((column) {
          String value = map.containsKey(column) ? map[column].toString() : '';
          value.replaceAll('"', '""');
          value = value.contains(',') ? '"' + value + '"' : value;
          row.add(value);
        });
        buffer.write(row.join(", ") + '\n');
      });

      // eof
      string = buffer.toString();
      string = string.replaceFirst('\n', '\r\n', string.lastIndexOf('\n'));
    }
    catch(e)
    {
      Log().debug('Error - Creating CSV column[$i]');
      Log().exception(e);
    }
    return string;
}