runFlutter function

Future<Process> runFlutter(
  1. String projectPath,
  2. List<String> args, {
  3. void onStdout(
    1. String msg
    )?,
  4. void onStderr(
    1. String msg
    )?,
})

wrapper for flutter commands

Implementation

Future<Process> runFlutter(
  String projectPath,
  List<String> args, {
  void Function(String msg)? onStdout,
  void Function(String msg)? onStderr,
}) async {
  Process? process;
  final canUseFlutter = await canUseCommand('flutter');
  if (canUseFlutter) {
    process = await Process.start(
      'flutter',
      args,
      runInShell: true,
      workingDirectory: projectPath,
    );
  }

  final canUseFvm = await canUseCommand('fvm');
  if (canUseFvm) {
    process = await Process.start(
      'fvm',
      [
        'flutter',
        ...args,
      ],
      runInShell: true,
      workingDirectory: projectPath,
    );
  }

  final decoder = const SystemEncoding().decoder;
  process?.stdout.listen((data) {
    if (onStdout == null) return;
    final msg = decoder.convert(data);
    onStdout.call(msg);
  });

  process?.stderr.listen((data) {
    if (onStderr == null) return;
    final msg = decoder.convert(data);
    onStderr.call(msg);
  });

  if (process != null) {
    return process;
  }

  throw Exception('Command Not Found: flutter');
}