Dart stream text file line by line

Dart
import 'dart:convert';
import 'dart:io';

Future<int> readLines(String path, void Function(int, String) onLine) async {
  final file = File(path);
  if (!await file.exists()) {
    throw FileSystemException('Missing file', path);
  }
  var n = 0;
  await for (final line
      in file.openRead().transform(utf8.decoder).transform(const LineSplitter())) {
    if (line.trim().isEmpty) continue;
    n++;
    onLine(n, line);
  }
  return n;
}