generateTemplate static method

String generateTemplate(
  1. List<TCsvColumn> columns, {
  2. bool includeSampleRow = true,
  3. String delimiter = ',',
  4. TCsvFileFormat format = TCsvFileFormat.csv,
})

Generates a sample template string based on a list of TCsvColumns in any format.

Implementation

static String generateTemplate(
  List<TCsvColumn> columns, {
  bool includeSampleRow = true,
  String delimiter = ',',
  TCsvFileFormat format = TCsvFileFormat.csv,
}) {
  if (format == TCsvFileFormat.json) {
    final sampleMap = <String, dynamic>{};
    if (includeSampleRow) {
      for (final col in columns) {
        if (col.defaultValue != null) {
          sampleMap[col.key] = col.defaultValue;
        } else {
          sampleMap[col.key] = switch (col.type) {
            TCsvColumnType.text => 'Sample ${col.header}',
            TCsvColumnType.number => 29.99,
            TCsvColumnType.integer => 10,
            TCsvColumnType.boolean => true,
            TCsvColumnType.image => 'sample_${col.key.toLowerCase()}.jpg',
          };
        }
      }
    }
    return toJson(includeSampleRow ? [sampleMap] : [], pretty: true);
  }

  final headers = columns.map((c) => c.header).toList();
  final sampleRows = <List<dynamic>>[];

  if (includeSampleRow) {
    final sampleRow = columns.map((col) {
      if (col.defaultValue != null) return col.formatValue(col.defaultValue);
      return switch (col.type) {
        TCsvColumnType.text => 'Sample ${col.header}',
        TCsvColumnType.number => '29.99',
        TCsvColumnType.integer => '10',
        TCsvColumnType.boolean => 'true',
        TCsvColumnType.image => 'sample_${col.key.toLowerCase()}.jpg',
      };
    }).toList();
    sampleRows.add(sampleRow);
  }

  final effectiveDelimiter = format.delimiter ?? delimiter;
  return toCsv(headers, sampleRows, delimiter: effectiveDelimiter);
}