Enum con extensiones

Los métodos de extensión no han sido compatibles hasta la versión 2.6.0 (ver Diagnostic messages: sdk_version_extension_methods), lo que significa que en el archivo pubspec.yaml debe figurar esa versión como mínimo:

environment:
  sdk: ">=2.6.0 <3.0.0"

Dos ejemplos de métodos de extensión con enum, un tipo especial de clase utilizada para representar un número fijo de valores constantes:

enum Palo { oros, bastos, espadas, copas }

extension PaloExtension on Palo {
  static const palos = {
    Palo.oros: 'oros',
    Palo.bastos: 'bastos',
    Palo.espadas: 'espadas',
    Palo.copas: 'copas'
  };
  String get nombre => palos[this];
}

main() {
  print(Palo.bastos.nombre);  // bastos
}
import 'package:audioplayers/audio_cache.dart';
import 'package:audioplayers/audioplayers.dart';

enum Sonido { baraja, carta, tecla, win, over }

extension SoundExtension on Sonido {
  static const files = {
    Sonido.baraja: 'audio/baraja.mp3',
    Sonido.carta: 'audio/carta.mp3',
    Sonido.tecla: 'audio/tecla.mp3',
    Sonido.win: 'audio/win.mp3',
    Sonido.over: 'audio/over.mp3'
  };
  String get file => files[this];
  void audio() async {
    await AudioCache().play(file, mode: PlayerMode.LOW_LATENCY);
  }
}

main(){
    Sonido.tecla.audio();
}