Во время разработки мобильных приложений иногда возникает необходимость выполнять команды терминала прямо из кода. Это может пригодиться, например, для автоматизации задач, работы с внешними CLI-инструментами или интеграции с системами сборки. Dart предоставляет способ выполнения таких команд через класс Process.
💡Что такое Process?
Класс dart:io → Process позволяет запускать внешние процессы и взаимодействовать с ними: передавать аргументы, получать стандартный вывод (stdout), ошибки (stderr) и код завершения.
Как использовать?
Рассмотрим на примере, в котором будем выводить результат flutter --version в консоль.
import 'dart:io';
void main() async {
final result = await Process.run('flutter', ['--version']);
if (result.exitCode == 0) {
print('Flutter version: ${result.stdout}');
} else {
print(Error: ${result.stderr}');
}
}
Что происходит:
▫️Process.run — запускает процесс и возвращает результат после его завершения
▫️'flutter' — команда, которую мы хотим выполнить
▫️['--version'] — список аргументов для команды
▫️result.stdout — стандартный вывод
▫️result.stderr — ошибка
▫️result.exitCode — код завершения (0 — успех, иначе ошибка)
Методы Process
▫️run(executable, arguments) — запускает процесс, дожидается его завершения и возвращает результат
▫️start(executable, arguments) — запускает процесс и возвращает объект Process, не дожидаясь завершения
▫️killPid(pid) — завершает любой процесс по его PID, даже если нет объекта Process
▫️kill() — завершает процесс, запущенный через start.
▫️getter exitCode — возвращает код выхода
Важно помнить
▫️Команда должна быть доступна в окружении (PATH)
▫️Всегда оборачивайте вызовы в try-catch на случай ошибок
▫️Будьте осторожны с пользовательским вводом: не передавайте его напрямую в Process без фильтрации
Мой опыт
Я использовала Process в проекте, где нужно было обрабатывать видео с помощью ffmpeg. Команды нарезки и склейки видео выполнялись прямо из Flutter-приложения, и Process стал отличным способом обернуть это взаимодействие с CLI.
Вывод
Process во Flutter (точнее, в Dart) — это мощный инструмент для расширения возможностей приложения: от автоматизации до взаимодействия с внешними утилитами.
Вы когда-нибудь использовали Process в Flutter или Dart? Для чего он вам понадобился?