csvStringFromData method

Future<String> csvStringFromData(
  1. List? data
)

Implementation

Future<String> csvStringFromData(List<dynamic>? data) async {
  String str = '';
  int i = 0;
  try {
//      Build Header
    List<String> header = [];
    List<String> columns = [];
    if ((data != null) && (data.isNotEmpty))
      data[0].forEach((key, value) {
        columns.add(key);
        String h = key.toString();
        h.replaceAll('"', '""');
        h = h.contains(',') ? '"' + h + '"' : h;
        header.add(h);
      });

//      Output Header
    str += header.join(", ") + '\n';
//      Output Data
    i = 0;
    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);
        });
        str += row.join(", ") + '\n';
      });
    // eof
    str.replaceFirst('\n', '\r\n', str.lastIndexOf('\n')); // replaces last
  }
  catch(e)
  {
    Log().exception(e, caller: 'grid.Model');
    Log().debug('Error - Creating CSV - column[$i]');
    Log().info('Error - Creating CSV');
  }
  return str;
}