// lib/shared/csv.dart class CsvBuilder { final StringBuffer _buf = StringBuffer(); final String delimiter; final String eol; CsvBuilder({this.delimiter = ';', this.eol = '\n'}); static String _escape(String? v, String delimiter) { final s = v ?? ''; final mustQuote = s.contains(delimiter) || s.contains('\n') || s.contains('"'); var out = s.replaceAll('"', '""'); return mustQuote ? '"$out"' : out; } void addRow(Iterable cols) { _buf.writeln( cols.map((c) => _escape(c?.toString(), delimiter)).join(delimiter)); } @override String toString() => _buf.toString(); }