transactionsFromCsv function

Stream<List<String>> transactionsFromCsv(
  1. Stream<List<int>> csvStream, {
  2. String fieldDelimiter = ',',
  3. String eol = '\n',
})

Parses a CSV byte stream efficiently.

This implementation uses a Hybrid Strategy:

  1. Fast Path: If a line contains no quotes, it uses Dart's native split, which is extremely fast.
  2. Robust Path: If quotes are detected, it switches to a manual character parser for that line to handle escaped commas correctly.

This ensures maximum performance for standard datasets while maintaining correctness for complex ones, without requiring user configuration.

Implementation

Stream<List<String>> transactionsFromCsv(
  Stream<List<int>> csvStream, {
  String fieldDelimiter = ',',
  String eol = '\n',
}) {
  return csvStream
      .transform(utf8.decoder)
      .transform(const LineSplitter())
      .map((line) {
        if (line.isEmpty) return const <String>[];

        // Check for quotes once.
        // If no quotes, use the native split.
        if (!line.contains('"')) {
          return line.split(fieldDelimiter).map((e) => e.trim()).toList();
        }

        return _parseComplexCsvLine(line, fieldDelimiter);
      })
      .where((row) => row.isNotEmpty);
}