Parse command line arguments directly into an annotation class using the Dart Build System.
Annotate a class with @CliOptions() from package:build_cli_annotations.
import 'package:build_cli_annotations/build_cli_annotations.dart';
part 'example.g.dart';
@CliOptions()
class Options {
  @CliOption(abbr: 'n', help: 'Required. The name to use in the greeting.')
  final String name;
  final bool nameWasParsed;
  late bool yell;
  @CliOption(defaultsTo: Language.en, abbr: 'l')
  late Language displayLanguage;
  @CliOption(negatable: false, help: 'Prints usage information.')
  late bool help;
  Options(this.name, {this.nameWasParsed = false});
}
enum Language { en, es }Configure and run the Dart Build System and a set of helpers is created to parse the corresponding command line arguments and populate your class.
void main(List<String> args) {
  var options = parseOptions(args);
  if (!options.nameWasParsed) {
    throw new ArgumentError('You must set `name`.');
  }
  print(options.name);
}Add three packages to pubspec.yaml:
dependencies:
  build_cli_annotations: ^1.0.0
dev_dependencies:
  build_cli: ^1.0.0
  build_runner: ^1.0.0build_cli_annotationsis a separate package containing the annotations you add to classes and members to tellbuild_cliwhat to do.- If the code you're annotating is in a published directory – 
lib,bin– put it in thedependenciessection. 
- If the code you're annotating is in a published directory – 
 build_clicontains the logic to generate the code.- It should almost always be put in 
dev_dependencies. 
- It should almost always be put in 
 build_runnercontains the logic to run a build and generate code.- It should almost always be put in 
dev_dependencies. 
- It should almost always be put in 
 
Uses package:args under the covers.
- The package contains a fully documented end-to-end example.
 - The test directory contains implementations that exercise most of the features of this package.
 - Also look at the
package:peanutsource code. Theoptionsfiles in thesrcdirectory as the interesting files.