execCmds method Null safety

Future<List<int>> execCmds(
  1. String distribution,
  2. List<String> cmds,
  3. {required dynamic onMsg(
    1. String
    ),
  4. required Function onDone}
)

Executes a command list in a WSL distro @param distribution: String @param cmd: List @return Future<List>

Implementation

Future<List<int>> execCmds(
  String distribution,
  List<String> cmds, {
  required Function(String) onMsg,
  required Function onDone,
}) async {
  List<int> processes = [];
  Process result = await Process.start(
      'wsl', ['-d', distribution, '-u', 'root'],
      mode: ProcessStartMode.detachedWithStdio);

  Timer currentWaiter = Timer(const Duration(seconds: 15), () {
    result.kill();
    onDone();
  });

  result.stdout
      .cast<List<int>>()
      .transform(const Utf8Decoder())
      .listen((String line) {
    resultQueue.add(line);
    onMsg(line);
    currentWaiter.cancel();
    // No new output within the last 30 seconds
    currentWaiter = Timer(const Duration(seconds: 15), () {
      result.kill();
      onDone();
    });
  });

  for (var cmd in cmds) {
    result.stdin.writeln(cmd);
  }
  return processes;
}