Ce face stdin.readLineSync
stdin.readLineSync() oprește programul până când utilizatorul scrie un rând și apasă Enter, apoi returnează textul ca String, fără caracterul de rând nou. Este felul obișnuit de a citi date de la tastatură într-un program de consolă.
Tipul returnat este String?: când intrarea s-a terminat (Ctrl+D pe macOS/Linux, Ctrl+Z pe Windows, sau sfârșitul fișierului trimis cu <), returnează null. De aceea scrii de obicei stdin.readLineSync() ?? '' sau verifici null într-o buclă.
Textul citit este mereu un șir; pentru numere îl convertești cu int.tryParse sau double.tryParse. Pentru o întrebare pe același rând cu răspunsul, afișează textul cu stdout.write, nu cu print.
Parametri
| Parametru | Descriere |
|---|---|
encoding |
Opțional. Codificarea textului; implicit codificarea sistemului (UTF-8 pe macOS și Linux). |
retainNewlines |
Opțional. Dacă este true, păstrează caracterul de rând nou la final. |
Ce returnează
Rândul citit, fără \n, sau null dacă nu mai există date de citit.
Exemple
Exemplul 1: Întrebare și răspuns
Textul scris de utilizator nu apare în rezultat, pentru că a fost trimis ca intrare; în terminal l-ai vedea după întrebare.
import 'dart:io';
void main() {
stdout.write('Cum te cheamă? ');
final nume = stdin.readLineSync() ?? '';
stdout.write('Din ce oraș ești? ');
final oras = stdin.readLineSync() ?? '';
print('');
print('Bună, $nume din $oras!');
}
Ce scrie utilizatorul (intrare)
Ana
Iași
Rezultat
Cum te cheamă? Din ce oraș ești?
Bună, Ana din Iași!
Exemplul 2: Citirea unui număr cu verificare
int.tryParse returnează null pentru text care nu este număr, așa că programul cere din nou.
import 'dart:io';
void main() {
int? varsta;
while (varsta == null) {
print('Câți ani ai?');
final rand = stdin.readLineSync();
if (rand == null) return;
varsta = int.tryParse(rand.trim());
if (varsta == null) print('„$rand” nu este un număr.');
}
print('Peste 10 ani vei avea ${varsta + 10} ani.');
}
Ce scrie utilizatorul (intrare)
douăzeci
20
Rezultat
Câți ani ai?
„douăzeci” nu este un număr.
Câți ani ai?
Peste 10 ani vei avea 30 ani.
Exemplul 3: Citire până la sfârșitul intrării
import 'dart:io';
void main() {
final cumparaturi = <String>[];
String? rand;
while ((rand = stdin.readLineSync()) != null) {
if (rand!.trim().isNotEmpty) cumparaturi.add(rand.trim());
}
print('Lista are ${cumparaturi.length} produse: ${cumparaturi.join(', ')}');
}
Ce scrie utilizatorul (intrare)
pâine
lapte
brânză
Rezultat
Lista are 3 produse: pâine, lapte, brânză
Greșeli frecvente
- Folosești rezultatul direct ca
String: tipul esteString?șidart analyzedă eroare. Trateazănullcu??sau cu o verificare. - Uiți
trim(): pe Windows rândul poate păstra un\r, iar spațiile accidentale facint.parsesă eșueze. - Apelezi
readLineSyncîntr-o aplicație Flutter: acolo nu există consolă. Funcția este pentru programe de linie de comandă.
Comenzi înrudite
stdin: stdin este intrarea standard a programului: ce scrie utilizatorul la tastatură sau ce primește programul printr-un pipe.stdout.write: stdout.write scrie text fără rând nou la final; stdout.writeln adaugă rândul nou, ca print.stdin.echoMode: echoMode ascunde sau arată ce tastează utilizatorul (pentru parole); lineMode citește tastele imediat, fără să aștepte Enter.