import '../modelos/emisora.dart'; /// User-selectable ordering for every station list in the app. enum OrdenEmisoras { nombre, calidad } /// Returns a sorted COPY of [emisoras] according to [orden]. List ordenarEmisoras(List emisoras, OrdenEmisoras orden) { final ordenadas = List.from(emisoras); switch (orden) { case OrdenEmisoras.nombre: ordenadas.sort( (a, b) => a.nombre.toLowerCase().compareTo(b.nombre.toLowerCase()), ); case OrdenEmisoras.calidad: ordenadas.sort((a, b) { final porBitrate = (b.bitrate ?? 0).compareTo(a.bitrate ?? 0); if (porBitrate != 0) return porBitrate; return 0; }); } return ordenadas; } /// Identity-memoized derived list (S4-R5). /// /// Derived-list getters used to return a fresh copy on every read, which made /// `context.select` rebuild on EVERY notification (lists compare by identity). /// This memo recomputes only when one of the source [claves] changes identity, /// so unrelated notifications (e.g. audio buffer events) stop rebuilding the /// screens that select these lists. class MemoLista { List? _claves; List? _resultado; List obtener(List claves, List Function() calcular) { final anteriores = _claves; final resultado = _resultado; if (anteriores != null && resultado != null && anteriores.length == claves.length) { var iguales = true; for (var i = 0; i < claves.length; i++) { if (!identical(anteriores[i], claves[i])) { iguales = false; break; } } if (iguales) return resultado; } final nuevo = calcular(); _claves = List.of(claves); _resultado = nuevo; return nuevo; } }