Ce face StateError
StateError spune: „operația este corectă în general, dar nu acum”. Exemple din biblioteca standard: first, last, single sau reduce pe o colecție goală (No element), single pe o colecție cu mai multe elemente (Too many elements), ascultarea de două ori a unui Stream simplu.
Aruncă și tu StateError în clasele tale când o metodă este apelată la momentul greșit: retragere dintr-un cont închis, pornirea unui joc deja pornit. Mesajul este în câmpul message.
Pentru colecții există variante care nu aruncă: firstOrNull, lastOrNull, firstWhere(..., orElse: ...).
Parametri
| Parametru | Descriere |
|---|---|
message |
Descrierea problemei. |
Ce returnează
Un obiect StateError.
Exemple
Exemplul 1: StateError din colecții
void main() {
var cos = <String>[];
try {
print(cos.first);
} on StateError catch (e) {
print('first: ${e.message}');
}
try {
print(['Ana', 'Mihai'].single);
} on StateError catch (e) {
print('single: ${e.message}');
}
print(cos.firstOrNull);
}
Rezultat
first: No element
single: Too many elements
null
Exemplul 2: O clasă care își verifică starea
class Comanda {
final produse = <String>[];
bool trimisa = false;
void adauga(String p) {
if (trimisa) throw StateError('Comanda a fost deja trimisă');
produse.add(p);
}
void trimite() {
if (produse.isEmpty) throw StateError('Comanda este goală');
trimisa = true;
}
}
void main() {
var c = Comanda();
try {
c.trimite();
} on StateError catch (e) {
print(e.message);
}
c.adauga('Pizza');
c.trimite();
try {
c.adauga('Suc');
} on StateError catch (e) {
print(e);
}
}
Rezultat
Comanda este goală
Bad state: Comanda a fost deja trimisă
Greșeli frecvente
- Folosești
lista.firstfără să știi sigur că lista are elemente. VerificăisNotEmptysau foloseștefirstOrNull.
Comenzi înrudite
Error: Clasa de bază pentru greșelile de programare (index greșit, argument invalid); stackTrace arată unde a fost aruncată.ArgumentError: Eroarea aruncată când o funcție primește un argument nepermis; ArgumentError.value include și valoarea greșită.Iterable.first: first și last dau primul și ultimul element; single dă singurul element și verifică faptul că este unul singur.Iterable.firstOrNull: Primul, ultimul sau singurul element, ori null în loc de excepție când nu există.