Если ты хоть раз писал CLI-пакет на Dart, то точно задумывался, как обрабатывать аргументы в main().
Можно, конечно, написать свой парсер, но проще воспользоваться готовым решением, например, библиотекой args. Она превращает сырые аргументы из командной строки в понятный набор параметров и значений.
Как это работает?
Внутри args реализован простой парсер на основе Map, куда добавляются опции и флаги.
При запуске команды с аргументами библиотека определяет, что передано, и возвращает готовую структуру — ArgResults.
Как работать с args?
Первым делом добавь зависимость в pubspec.yaml, затем — создай парсер:
final parser = ArgParser();
Также ты можешь задать дополнительные параметры при инициализации:
✔️ allowTrailingOptions (по умолчанию true) — позволяет указывать флаги и параметры после позиционных аргументов
✔️ usageLineLength — задает максимальную длину строки при выводе usage
Добавление параметров
🔹 Используй addOption, если параметр принимает значение
parser.addOption('output');
🔹 Используй addFlag, если параметр — просто переключатель
parser.addOption('env', defaultsTo: 'dev');
По умолчанию у флагов работает форма --no-flag. Если это не нужно, добавь negatable: false.
Дополнительные настройки
▫️Сокращения с помощью abbr:
parser.addFlag('screenshot', abbr: 's');▫️ Значение по умолчанию:
parser.addOption('env', defaultsTo: 'dev');Примеры использования
Команды с аргументами можно вызывать так:
dart run command_name --verbose=false
dart run command_name --output=somevalue
Если заданы сокращения, то можно:
dart run command_name -v=false
dart run command_name -o=somevalue
Валидация и обратные вызовы
▫️Хочешь ограничить допустимые значения? Используй allowed:
parser.addOption('mode', allowed: ['dev', 'prod']);▫️ Если передано недопустимое значение — будет выброшено исключение ArgParserException
▫️ Для дополнительной логики можно также передать callback
Обязательные параметры
Если параметр помечен как mandatory: true, но не передан — при его извлечении Dart выбросит ArgumentError.
Вывод команд
Но и наконец, чтобы пользователи знали, какие аргументы доступны и как их использовать, добавь флаг --help и выведи справку через parser.usage:
parser.addFlag(
'help',
abbr: 'h',
help: 'Show help information for available commands',
negatable: false,
);
if (results['help'] as bool) {
print('Command help:\n');
print(parser.usage);
exit(0);
}
📌 Рекомендую завершать выполнение программы после вывода справки, чтобы избежать лишнего кода, если help — единственный аргумент.
В посте рассмотрела не все возможности пакета: обязательно загляни в документацию на pub.dev, чтобы узнать больше.
❤️ — если пост был полезным
