csvStringFromData method
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;
}