Enum.name în Dart

Numele valorii enum, ca text, exact cum este scris în declarație (fără numele tipului).

Sintaxă
String get name
// invers: NumeEnum.values.byName(String name)

Ce face Enum.name

Culoare.rosu.name este textul 'rosu'. Spre deosebire de toString(), care dă 'Culoare.rosu', name conține doar numele valorii. Este forma potrivită pentru salvare în JSON, fișiere sau baze de date.

Drumul invers se face cu NumeEnum.values.byName('rosu'), care returnează valoarea sau aruncă ArgumentError dacă numele nu există. Pentru afișare către utilizatori (cu diacritice, spații) adaugă în enum un câmp propriu, pentru că numele din cod nu pot avea spații.

Ce returnează

Un String.

Exemple

Exemplul 1: name, toString și byName

enum Status { nou, inLucru, livrat }

void main() {
  var s = Status.inLucru;
  print(s.name);
  print(s.toString());
  print(Status.values.byName('livrat'));
  try {
    Status.values.byName('anulat');
  } on ArgumentError {
    print('Status necunoscut');
  }
}

Rezultat

inLucru
Status.inLucru
Status.livrat
Status necunoscut

Exemplul 2: Salvare în JSON și etichete pentru utilizator

import 'dart:convert';

enum Plata {
  card('Card bancar'),
  ramburs('Plată la livrare'),
  transfer('Transfer bancar');

  final String eticheta;
  const Plata(this.eticheta);
}

void main() {
  var json = jsonEncode({'comanda': 1024, 'plata': Plata.ramburs.name});
  print(json);
  var date = jsonDecode(json) as Map<String, dynamic>;
  var plata = Plata.values.byName(date['plata'] as String);
  print(plata.eticheta);
}

Rezultat

{"comanda":1024,"plata":"ramburs"}
Plată la livrare

Greșeli frecvente

  • Folosești toString() pentru salvare și apoi compari cu 'rosu': textul este 'Culoare.rosu'. Folosește name.

Comenzi înrudite

  • Enum: Clasa de bază a tuturor tipurilor enum; index dă poziția valorii în declarație, începând de la 0.
  • enum: Un tip cu un număr fix de valori numite (zilele săptămânii, stările unei comenzi), eventual cu câmpuri și metode.
  • Enum.compareByName: Compară două valori enum după nume (alfabetic); compareByIndex le compară după ordinea din declarație.