prompt method

String prompt(
  1. String? message, {
  2. Object? defaultValue,
  3. bool hidden = false,
})

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;
}