UnsupportedError în Dart

UnsupportedError: operația nu este permisă pentru acest obiect; UnimplementedError: codul nu a fost încă scris.

Sintaxă
UnsupportedError(String message)
UnimplementedError([String? message])

Ce face UnsupportedError

UnsupportedError înseamnă că obiectul nu acceptă deloc operația. Cel mai des îl vezi la colecțiile nemodificabile: add pe o listă const sau pe List.unmodifiable aruncă Unsupported operation: Cannot add to an unmodifiable list. Tot el apare la toInt() pe NaN sau infinit.

UnimplementedError este o subclasă folosită ca „semn de șantier”: o metodă declarată, dar nescrisă încă. IDE-urile generează des throw UnimplementedError(); în corpul metodelor noi. Nu trebuie să rămână în codul final.

Ambele au câmpul message.

Parametri

Parametru Descriere
message Descrierea operației nepermise sau neimplementate.

Ce returnează

Un obiect eroare.

Exemple

Exemplul 1: Colecții care nu pot fi modificate

void main() {
  const zile = ['luni', 'marți', 'miercuri'];
  try {
    zile.add('joi');
  } on UnsupportedError catch (e) {
    print(e.message);
  }
  var copie = [...zile, 'joi'];
  print(copie);
  try {
    double.nan.toInt();
  } on UnsupportedError catch (e) {
    print(e);
  }
}

Rezultat

Cannot add to an unmodifiable list
[luni, marți, miercuri, joi]
Unsupported operation: Infinity or NaN toInt

Exemplul 2: Metode neimplementate încă

abstract class Plata {
  String plateste(double suma);
}

class PlataCard implements Plata {
  @override
  String plateste(double suma) => 'Plătit $suma lei cu cardul';
}

class PlataCrypto implements Plata {
  @override
  String plateste(double suma) => throw UnimplementedError('Plata crypto vine în versiunea 2');
}

void main() {
  for (Plata p in [PlataCard(), PlataCrypto()]) {
    try {
      print(p.plateste(99.9));
    } on UnimplementedError catch (e) {
      print('Indisponibil: ${e.message}');
    }
  }
}

Rezultat

Plătit 99.9 lei cu cardul
Indisponibil: Plata crypto vine în versiunea 2

Greșeli frecvente

  • Încerci să modifici o listă primită din const, List.unmodifiable sau Map.unmodifiable. Fă o copie ([...lista], toList()) și modifică copia.

Comenzi înrudite

  • Error: Clasa de bază pentru greșelile de programare (index greșit, argument invalid); stackTrace arată unde a fost aruncată.
  • StateError: Eroarea aruncată când o operație nu are sens în starea curentă a obiectului, de exemplu first pe o listă goală.
  • List.from: Creează o listă nouă cu elementele unei colecții; of verifică tipul la compilare, from la rulare.
  • const: Declară o constantă calculată la compilare; obiectele const sunt complet imuabile și partajate.