prompt method
Prompts user and returns response.
Provide a default value via defaultValue
.
Set hidden
to true
if you want to hide user input for sensitive info.
This method requires a terminal to be attached to stdout. See https://api.dart.dev/stable/dart-io/Stdout/hasTerminal.html.
Implementation
String prompt(String? message, {Object? defaultValue, bool hidden = false}) {
final hasDefault = defaultValue != null && '$defaultValue'.isNotEmpty;
final resolvedDefaultValue = hasDefault ? '$defaultValue' : '';
final suffix =
hasDefault ? ' ${darkGray.wrap('($resolvedDefaultValue)')}' : '';
final resolvedMessage = '$message$suffix ';
_stdout.write(resolvedMessage);
final input = hidden ? _readLineHiddenSync() : _readLineSync();
final response =
input == null || input.isEmpty ? resolvedDefaultValue : input;
final lines = resolvedMessage.split('\n').length - 1;
final prefix =
lines > 1 ? '\x1b[A\u001B[2K\u001B[${lines}A' : '\x1b[A\u001B[2K';
_stdout.writeln(
'''$prefix$resolvedMessage${styleDim.wrap(lightCyan.wrap(hidden ? '******' : response))}''',
);
return response;
}