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 = core.StackTraceImpl();

  Object? exception;

  final done = Completer<bool>();

  late StreamSubscription<String> subscription;

  subscription =
      utf8.decoder.bind(inputStream).transform(const LineSplitter()).listen(
            (line) async {
              final cont = lineAction(line);
              if (cont == false) {
                await 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);
    }
  }
}