requestInput method

(String, NatrixMount) requestInput({
  1. NatrixText prefix = const NatrixText.empty(),
  2. NatrixColor inputForegroundColor = .none,
  3. NatrixColor inputBackgroundColor = .none,
  4. NatrixStyle inputStyle = .none,
  5. bool hideInput = false,
})

Implementation

(String, NatrixMount) requestInput({
  final NatrixText prefix = const NatrixText.empty(),
  NatrixColor inputForegroundColor = .none,
  NatrixColor inputBackgroundColor = .none,
  NatrixStyle inputStyle = .none,
  final bool hideInput = false,
}) {
  if (!prefix.valid()) {
    throw Exception(_invalidMessage(prefix));
  }
  final bool initEcho = io.stdin.echoMode;
  final bool initLine = io.stdin.lineMode;
  if (hideInput) {
    io.stdin.echoMode = false;
    io.stdin.lineMode = true;
  }
  final NatrixMount mount = NatrixMount(
    position: _totalLinesWritten++,
    output: NatrixStdoutSink.stdout,
  );
  mount.output.sink.write(
    "${prefix.ansi}"
    "${inputForegroundColor.ansiForegroundSequence}"
    "${inputBackgroundColor.ansiBackgroundSequence}"
    "${inputStyle.ansiStartSequence}",
  );
  final String input = io.stdin.readLineSync() ?? "";
  mount.output.sink.write(
    "${inputStyle.ansiResetSequence}"
    "${inputBackgroundColor.ansiResetBackgroundSequence}"
    "${inputForegroundColor.ansiResetForegroundSequence}",
  );

  if (hideInput) {
    io.stdin.echoMode = initEcho;
    io.stdin.lineMode = initLine;
  }
  return (input, mount);
}