Commander is a Dart library for creating user interfaces within the terminal.
It provides interactive components such as option selection and text input with advanced management of user input.
To use Commander in your Dart project, add this to your pubspec.yaml
file :
dependencies:
commander_ui: ^1.1.0
Then run pub get
to install the dependencies.
A simple example of using Commander to create an input component :
- โ Placeholder
- โ Validator with error message as callback
- โ Default value
StdinBuffer.initialize();
final input = Input(
answer: 'Please give us your name',
placeholder: 'firstname lastname',
validate: (value) => switch(value) {
String value when value.trim().isNotEmpty => Ok(null),
_ => Err('Please provide a valid name')
}
);
A simple example of using Commander to create an option selection component :
- โ Placeholder
- โ Searchable values
- โ Selected line custom style
- โ Unselected line custom style
- โ Display transformer
- โ Count limitation (actually defined as 5)
StdinBuffer.initialize();
final select = Select(
answer: "Please select your best hello",
options: List.generate(20, (index) => Item('${index + 1}. Hello World', index + 1)),
placeholder: 'Type to filter',
selectedLineStyle: (line) => '${AsciiColors.green('โฏ')} ${AsciiColors.lightCyan(line)}',
unselectedLineStyle: (line) => ' $line',
onDisplay: (item) => item.name
);
final selected = switch(await select.handle()) {
Ok(:final value) => 'My value is ${value.value}',
Err(:final error) => Exception('Error: $error'),
_ => 'Unknown',
};
print(selected);
A simple example of using Commander to create a switch component :
StdinBuffer.initialize();
final switch = Switch(
answer: 'Do you love cat ?',
defaultValue: false,
);
final result = switch(await switch.handle()) {
Ok(:final value) => value.value
? 'I love cat ๐'
: 'I hate cat ๐',
Err(:final error) => Exception('Error: $error'),
_ => 'Unknown',
};
print(result);