enum Sport { football, fitness, footgolf } extension SportExt on Sport { String toStr() => this.toString().split(".").last; bool equalsTo(Sport sport) => this.toString() == sport.toString(); bool equalsStringTo(String sport) => this.toStr() == sport; String description(Sport sport) { if (Sport.football.equalsTo(sport)) { return "Football"; } else if (Sport.fitness.equalsTo(sport)) { return "Fitness / Body Building"; } else if (Sport.footgolf.equalsTo(sport)) { return "Footgolf"; } else { return "Sport"; } } } class FitnessState { late final String value; late final String stateText; late final String explanation; static String beginner = "beginner"; static String intermediate = "intermediate"; static String advanced = "advanced"; static String professional = "professional"; FitnessState({required this.value, required this.stateText, required this.explanation}); bool isEqual(FitnessState? state) { if (state == null) { return false; } return state.value == this.value; } @override String toString() { return stateText; } } class FitnessItem { static final FitnessItem _singleton = FitnessItem._internal(); List elements = []; factory FitnessItem() { return _singleton; } FitnessItem._internal() { elements.add(FitnessState( value: FitnessState.beginner, stateText: _capitalize(FitnessState.beginner), explanation: "I am " + FitnessState.beginner)); elements.add(FitnessState( value: FitnessState.intermediate, stateText: _capitalize(FitnessState.intermediate), explanation: "I am " + FitnessState.intermediate)); elements.add(FitnessState( value: FitnessState.advanced, stateText: _capitalize(FitnessState.advanced), explanation: "I am " + FitnessState.advanced)); elements.add(FitnessState( value: FitnessState.professional, stateText: _capitalize(FitnessState.professional), explanation: "I am " + FitnessState.professional)); } String _capitalize(String value) { return "${value[0].toUpperCase()}${value.substring(1)}"; } List toList() => elements; FitnessState? getItem(String? value) { if (value == null || value.length == 0) { return elements[0]; } FitnessState? selected; elements.forEach((element) { if (element.value == value) { selected = element; } }); return selected; } }