askChoice method

String askChoice(
  1. String question,
  2. List<String> options, {
  3. String? defaultValue,
})

Implementation

String askChoice(
  String question,
  List<String> options, {
  String? defaultValue,
}) {
  if (options.isEmpty) return '';
  output.write('\n$question\n');
  for (var i = 0; i < options.length; i++) {
    final marker = options[i] == defaultValue ? '*' : ' ';
    output.write('  $marker ${i + 1}. ${options[i]}\n');
  }

  while (true) {
    final hint = defaultValue != null
        ? ' [${options.indexOf(defaultValue) + 1}]'
        : '';
    output.write('Enter number$hint: ');
    final input = readLine()?.trim() ?? '';
    if (input.isEmpty && defaultValue != null) {
      return defaultValue;
    }
    final index = int.tryParse(input);
    if (index != null && index >= 1 && index <= options.length) {
      return options[index - 1];
    }
    output.write('Invalid choice. Try again.\n');
  }
}