Ce face FormatException
FormatException apare când transformi un text care nu are forma cerută: int.parse('12a'), double.parse, DateTime.parse, Uri.parse, jsonDecode. Este o Exception, deci se prinde și se tratează: afișezi un mesaj și ceri din nou datele.
Are trei câmpuri: message (descrierea problemei), source (textul care a fost citit, dacă se cunoaște) și offset (poziția din text unde a apărut problema, sau null). toString() le combină și, când are poziția, arată și locul greșelii.
O poți arunca și tu, în funcțiile care citesc formate proprii: throw FormatException('CNP invalid', text, 3). Pentru citiri în care textul greșit este normal, metodele tryParse returnează null și evită excepția.
Parametri
| Parametru | Descriere |
|---|---|
message |
Descrierea problemei. |
source |
Textul (sau datele) citite. |
offset |
Poziția problemei în source. |
Ce returnează
Un obiect FormatException.
Exemple
Exemplul 1: Câmpurile unei FormatException
int.parse raportează poziția 0 (tot textul este greșit), iar jsonDecode arată poziția exactă a caracterului neașteptat.
import 'dart:convert';
void main() {
try {
int.parse('12a');
} on FormatException catch (e) {
print('mesaj: ${e.message}');
print('sursă: ${e.source}');
print('poziție: ${e.offset}');
}
try {
jsonDecode('{"nume": "Ana", }');
} on FormatException catch (e) {
print('JSON greșit: ${e.message} la poziția ${e.offset}');
}
}
Rezultat
mesaj: Invalid radix-10 number
sursă: 12a
poziție: 0
JSON greșit: Unexpected character la poziția 16
Exemplul 2: Aruncarea unei FormatException proprii
Funcția verifică un cod poștal românesc. toString() afișează și textul sursă, iar când știe poziția pune un ^ sub caracterul greșit.
int codPostal(String text) {
if (text.length != 6) {
throw FormatException('Codul poștal are 6 cifre, nu ${text.length}', text);
}
for (var i = 0; i < text.length; i++) {
var c = text.codeUnitAt(i);
if (c < 48 || c > 57) throw FormatException('Caracter nepermis', text, i);
}
return int.parse(text);
}
void main() {
for (var t in ['700506', '7005', '70O506']) {
try {
print('Cod valid: ${codPostal(t)}');
} on FormatException catch (e) {
print(e);
}
}
}
Rezultat
Cod valid: 700506
FormatException: Codul poștal are 6 cifre, nu 4
7005
FormatException: Caracter nepermis (at character 3)
70O506
^
Greșeli frecvente
- Prinzi
FormatExceptionîntr-o buclă de citire doar ca să ceri din nou valoarea.int.tryParseeste mai simplu și mai rapid. - Afișezi utilizatorului direct
e.toString(), care este în engleză și tehnic. Afișează un mesaj propriu și păstrează detaliile pentru jurnal.
Comenzi înrudite
Exception: Interfața pentru probleme așteptate, pe care programul le poate trata: date greșite, fișier lipsă, rețea căzută.int.parse: Transformă un text în număr întreg; parse aruncă FormatException la text greșit, tryParse returnează null.double.parse: Transformă un text în număr cu zecimale; parse aruncă FormatException, tryParse returnează null.DateTime.parse: Transformă un text în format ISO 8601 (2026-10-19 14:30) într-un DateTime; tryParse dă null la text greșit.jsonDecode: Citește un text JSON și îl transformă în Map, List, String, num, bool sau null; dă FormatException la text greșit.