fromCsvString static method

ImportResult fromCsvString(
  1. String csvContent, {
  2. String schemaName = 'ImportedData',
  3. String delimiter = ',',
  4. bool hasHeader = true,
})

Imports from a CSV string

Implementation

static ImportResult fromCsvString(
  String csvContent, {
  String schemaName = 'ImportedData',
  String delimiter = ',',
  bool hasHeader = true,
}) {
  try {
    final converter = CsvDecoder(
      fieldDelimiter: delimiter,
      dynamicTyping: true,
    );

    final rows = converter.convert(csvContent);
    if (rows.isEmpty) {
      return ImportResult(
        schema: _createEmptySchema(schemaName),
        data: [],
        rowCount: 0,
        error: 'Empty CSV',
      );
    }

    // Extract the header
    List<String> headers;
    int dataStartIndex;

    if (hasHeader) {
      headers = rows.first.map((e) => e.toString()).toList();
      dataStartIndex = 1;
    } else {
      headers = List.generate(rows.first.length, (i) => 'campo_$i');
      dataStartIndex = 0;
    }

    // Infer the types from the data
    final fieldTypes = _inferFieldTypes(rows, headers, dataStartIndex);

    final fields = <FieldDefinition>[];
    for (int i = 0; i < headers.length; i++) {
      fields.add(
        FieldDefinition(
          name: _sanitizeFieldName(headers[i]),
          displayName: headers[i],
          type: fieldTypes[i],
          isRequired: false,
        ),
      );
    }

    final data = <Map<String, dynamic>>[];
    for (int i = dataStartIndex; i < rows.length; i++) {
      final row = rows[i];
      final rowMap = <String, dynamic>{};

      for (int j = 0; j < headers.length && j < row.length; j++) {
        final fieldName = _sanitizeFieldName(headers[j]);
        rowMap[fieldName] = row[j];
      }

      data.add(rowMap);
    }

    // Create a dynamic schema
    final schema = _ImportedDataSchema(
      name: schemaName,
      displayName: schemaName,
      description: 'Schema imported from CSV',
      fields: fields,
      sampleData: data.isNotEmpty ? data.first : {},
    );

    return ImportResult(schema: schema, data: data, rowCount: data.length);
  } catch (e) {
    return ImportResult(
      schema: _createEmptySchema(schemaName),
      data: [],
      rowCount: 0,
      error: 'Error parsing the CSV: $e',
    );
  }
}