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) {
        for (var map in data) {
        i++;
        List<String> row = [];
        for (var column in columns) {
          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;
}