TGViewer
Flutter Friendly Flutter Friendly @flutterfriendly · 995 subscribers
Post #155 672
Привет, это Роза, Flutter Dev Friflex👋

Если ты хоть раз писал 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, чтобы узнать больше.

❤️ — если пост был полезным
  • ❤ 8
  • 👍 4
  • 🔥 4
More from @flutterfriendly
  1. May 14, 2026👀Какой сложный вопрос или тема по Flutter вас сейчас беспокоят? Может, задача не идет, ба…
  2. Apr 17, 2026💭Привет! Это Роза, Flutter-разработчица Friflex! Уверена, многие из вас знакомы с Dart De…
  3. Apr 8, 2026Привет, друзья! Делимся нашей страничкой на Хабре, чтобы всегда оставаться на связи. Там е…
  4. Apr 3, 2026🌸Апрель в календаре и на экране Весна зовет обновлять визуальное: убирать темные темы и в…
  5. Apr 1, 2026Всегда с нетерпением ждем этого дня, чтобы сделать подборку ИТ-мемов Пусть поводов для улы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →