part 'aperture_value.dart'; part 'iso_value.dart'; part 'shutter_speed_value.dart'; enum StopType { full, half, third } abstract class PhotographyValue { final T rawValue; final StopType stopType; const PhotographyValue(this.rawValue, this.stopType); T get value; } extension PhotographyValues on List { List whereStopType(StopType stopType) { switch (stopType) { case StopType.full: return where((e) => e.stopType == StopType.full).toList(); case StopType.half: return where((e) => e.stopType == StopType.full || e.stopType == StopType.half).toList(); case StopType.third: return where((e) => e.stopType == StopType.full || e.stopType == StopType.third).toList(); } } List fullStops() => whereStopType(StopType.full); List halfStops() => whereStopType(StopType.half); List thirdStops() => whereStopType(StopType.third); }