Lección 5 · 5 de 20
Leer del teclado · Dart
Lea lo que escribe el usuario en Dart con stdin.readLineSync() de dart:io y conviértalo en números con int.parse, double.parse e int.tryParse.

Para leer del teclado hay que importar la biblioteca `dart:io` con import 'dart:io'; en la primera línea. Trae stdin (la entrada) y stdout (la salida). `stdout.write()` escribe como print() pero sin saltar de línea, que es justo lo que se quiere para una pregunta.
`stdin.readLineSync()` espera a que el usuario escriba una línea y pulse Intro, y la devuelve como texto. Si ya no queda nada que leer devuelve null, por eso se escribe stdin.readLineSync() ?? '': el operador ?? pone una cadena vacía en ese caso. La lección 15 explica null y ?? con calma.
Lo que se teclea es siempre texto, aunque sean cifras. `int.parse()` convierte '29' en el entero 29, con el que ya se puede sumar, y `double.parse()` hace lo mismo con números con decimales como '1.40'. Con ellos se calcula el gasto en café de un año: precio por tazas por 52 semanas.
Si el texto no es un número, int.parse produce un error y el programa se detiene. `int.tryParse()` es más prudente: devuelve null en lugar de fallar. El tipo int? admite ese null, y el operador condicional elige qué escribir: aquí seven no es un número.
Al ejecutarlo, lo que se teclea sale de input.txt, una línea por pregunta. En la salida no se ven las respuestas porque llegan del archivo, no de la pantalla; en DMarlon Studio puede escribirlas usted en la consola.
Código · main.dart
import 'dart:io';void main() { // stdout.write prints without a new line, like a question. stdout.write('What is your name? '); // readLineSync() reads one line of text (or null if there is none). String name = stdin.readLineSync() ?? ''; print('Hello, $name!'); // What is typed is always text: int.parse turns it into a number. stdout.write('How old are you? '); int age = int.parse(stdin.readLineSync() ?? '0'); print('In ten years you will be ${age + 10}.'); // double.parse for numbers with decimals. stdout.write('Price of a coffee? '); double price = double.parse(stdin.readLineSync() ?? '0'); stdout.write('Coffees a week? '); int cups = int.parse(stdin.readLineSync() ?? '0'); double perYear = price * cups * 52; print('$name, you spend ${perYear.toStringAsFixed(2)} euros a year on coffee.'); // tryParse gives null instead of failing on bad text. stdout.write('Favourite number? '); int? favourite = int.tryParse(stdin.readLineSync() ?? ''); print(favourite == null ? 'That is not a number.' : 'Doubled: ${favourite * 2}');}Entrada (lo que se teclea) · input.txt
Lucia 29 1.40 5 seven
Salida · dart run main.dart
What is your name? Hello, Lucia! How old are you? In ten years you will be 39. Price of a coffee? Coffees a week? Lucia, you spend 364.00 euros a year on coffee. Favourite number? That is not a number.
Para recordar
import 'dart:io';traestdinystdout.stdin.readLineSync()lee una línea (onull).stdout.write()escribe sin saltar de línea.int.parseydouble.parseconvierten texto en número.int.tryParsedevuelvenullen vez de fallar.
Ejercicio
Pida el ancho y el alto de una habitación en metros (con decimales) y escriba su superficie con dos decimales.