read method

void read(
  1. CancelableLineAction lineAction
)

reads every line from a file calling the passed lineAction for each line. if you return false from a lineAction call then the read returns and no more lines are read.

Implementation

void read(CancelableLineAction lineAction) {
  final inputStream = _file.openRead();

  final stackTrace = StackTraceImpl();

  Object? exception;

  final done = Completer<bool>();

  late StreamSubscription<String> subscription;

  subscription =
      utf8.decoder.bind(inputStream).transform(const LineSplitter()).listen(
          (line) {
            final cont = lineAction(line);
            if (cont == false) {
              subscription.cancel().then((finished) => done.complete(true));
            }
          },
          cancelOnError: true,
          //ignore: avoid_types_on_closure_parameters
          onError: (Object error) {
            exception = error;
            done.complete(false);
          },
          onDone: () {
            done.complete(true);
          });

  waitForEx(done.future);

  if (exception != null) {
    if (exception is DCliException) {
      // not an exception, the user just doesn't want to continue.
    } else {
      throw DCliException.from(exception, stackTrace);
    }
  }
}