streamRawResourceUntil method

Stream<MapRecord> streamRawResourceUntil(
  1. Completer<void> cancellationSignal, [
  2. LoadCriterion? criteria
])

Implementation

Stream<MapRecord> streamRawResourceUntil(
  Completer<void> cancellationSignal, [
  LoadCriterion? criteria,
]) async* {
  if (data != null) {
    BaseCSVFile finalData = data!;
    if (criteria != null) {
      finalData = finalData.filterThroughCriteria(criteria);
    }

    yield* Stream.fromIterable(finalData.toList(growable: false));
    return;
  }

  final stream = streamRecordsThroughFile(
    resourceFile,
    fieldDefinitions,
    criteria,
    cancellationSignal: cancellationSignal,
  ).asBroadcastStream();
  final rawHeader = await stream.first;

  final header = rawHeader
      .map(
        (e) => fieldDefinitions.firstWhere(
          (element) => element.name == e,
          orElse: () => FieldDefinition<Object>(
            e ?? 'unnamed_field',
            (dataset, header, records) => null,
            type: TextFieldType(),
          ),
        ),
      )
      .toList(growable: false);

  await for (final e in stream.transform(
    ListRecordToMapRecordTransformer(header),
  )) {
    if (cancellationSignal.isCompleted) return;
    yield e;
  }
}