Upgrading csv 7 to 8
Breaking7.2.0 → 8.0.0Breaking5Fixed1
BreakingUpgrade verdict
4 breaking changes.
In plain terms
- The main class has a new name, Csv. The old name still works for now but is deprecated.
- Csv is no longer a standard Dart Codec. Call asCodec() to get one when a library requires it.
- The decoder now works as a stream transformer and emits one row per event.
- To combine the decoder with another codec, go through asCodec() first.
Must act Top 3 of 4 that need code or config changes
What you must change
Breaking4
Renames CsvCodec to Csv, keeping a deprecated CsvCodec typedef for migration.
CsvCodecCsvCsv no longer extends dart:convert's Codec; use asCodec() when a Codec is needed, such as for fuse().
CsvCodecasCodec()fuse()CsvDecoder is now a StreamTransformerBase<String, List<dynamic>> instead of a Converter, with each stream event being a single row.
CsvDecoderStreamTransformerBaseConverterCsvEncoderReplaces csv.decoder.fuse(...) with csv.asCodec().decoder.fuse(...).
csv.decoder.fuse()csv.asCodec().decoder.fuse()API changes
Generated by DepDelta from published Dart source. Not mixed with prose notes.
- removed:
class CsvCodec extends Codec<List<List<dynamic>>, String> - removed:
ctor CsvCodec({ String fieldDelimiter = …, String lineDelimiter = …, String quoteCharacter = …, String? escapeCharacter, QuoteMode quoteMode = …, bool addBom = …, bool autoDetect = …, bool skipEmptyLines = …, bool parseHeaders = …, dynamic Function(dynamic field, int index, String? header)? encoderTransform, dynamic Function(dynamic field, int index, String? header)? decoderTransform, bool dynami… - removed:
ctor CsvCodec.excel() - removed:
get CsvCodec.decoder: CsvDecoder - removed:
get CsvCodec.encoder: CsvEncoder - removed:
method CsvCodec.decodeWithHeaders(String encoded): List<CsvRow> - removed:
method CsvEncoder.startChunkedConversion( Sink<String> sink, ): ChunkedConversionSink<List<List<dynamic>>> - changed:
class CsvDecoder extends Converter<String, List<List<dynamic>>> → class CsvDecoder extends StreamTransformerBase<String, List<dynamic>> - changed:
class CsvEncoder extends Converter<List<List<dynamic>>, String> → class CsvEncoder extends StreamTransformerBase<List<dynamic>, String> - changed:
method CsvDecoder.startChunkedConversion(Sink<List<List<dynamic>>> sink): StringConversionSink → method CsvDecoder.startChunkedConversion(Sink<List<dynamic>> sink): StringConversionSink - changed:
method CsvEncoder.convert(List<List<dynamic>> input): String → method CsvEncoder.convert(List<List<dynamic>> rows): String - changed:
variable csv: final CsvCodec → variable csv: final Csv - changed:
variable excel: final CsvCodec → variable excel: final Csv - added:
class Csv - added:
ctor Csv({ String fieldDelimiter = …, String lineDelimiter = …, String quoteCharacter = …, String? escapeCharacter, QuoteMode quoteMode = …, bool addBom = …, bool autoDetect = …, bool skipEmptyLines = …, bool parseHeaders = …, dynamic Function(dynamic field, int index, String? header)? encoderTransform, dynamic Function(dynamic field, int index, String? header)? decoderTransform, bool dynamicTypi… - added:
ctor Csv.excel() - added:
get Csv.decoder: CsvDecoder - added:
get Csv.encoder: CsvEncoder - added:
method Csv.asCodec({int? maxRowsPerBatch}): Codec<List<List<dynamic>>, String> - added:
method Csv.decode(String input): List<List<dynamic>> - added:
method Csv.decodeWithHeaders(String encoded): List<CsvRow> - added:
method Csv.encode(List<List<dynamic>> rows): String - added:
method CsvDecoder.bind(Stream<String> stream): Stream<List<dynamic>> - added:
method CsvEncoder.bind(Stream<List<dynamic>> stream): Stream<String> - added:
typedef CsvCodec = Csv