Audit 7.1 (t4:325): the "New" action is a solid brand-teal pill with a plain add glyph -- was a tonal button with auto_awesome. Audit 7.2 (t4:326-330): the next-alarm banner is warmCoral-tinted with the Skip chip BESIDE the text on the same row -- was an opaque default card with the skip action stacked below as an OutlinedButton. Audit 7.3 (t4:332): the vacation row gains a trailing "d-d MON" date-range pill for the active-or-next range, built from the existing EstadoAlarmas.rangoVacacionesActivo/vacacionesProximas() accessors -- new formato_fechas.dart helper, no new state. Audit 7.4 (t4:337-345): the alarm card now shows a recurrence label next to the giant time (reusing the existing oneTimeOption/ dailyOption/weekdaysOption strings) and a themed station-icon slot next to the station name. The real per-station favicon is NOT rendered here -- same network-image hazard already documented for the ringing screen's audit 9.2 (Emisora.favicon is a network URL; Image.network hangs widget tests without a mocked HttpClient). The custom switch shape (52x32/26px thumb) is also left as Switch.adaptive -- a disclosed sub-gap, not a silent drop. Item 7.6 (_AccesoDiagnostico, an Android-reliability debug row) is a pre-approved addition not in the prototype -- informational only, no action needed.
43 lines
2.1 KiB
Dart
43 lines
2.1 KiB
Dart
import 'package:intl/intl.dart';
|
||
|
||
/// Locale-aware short date (S5-R4).
|
||
///
|
||
/// Replaces the old hardcoded `DD/MM/YYYY` pattern, which was wrong for
|
||
/// locales like en-US (M/D/Y) or ja (Y/M/D). [localeTag] accepts both
|
||
/// BCP-47 ('en-US') and ICU ('en_US') forms — intl canonicalizes them.
|
||
///
|
||
/// Date symbols for the active locale are loaded by
|
||
/// GlobalMaterialLocalizations, so any widget below MaterialApp can call
|
||
/// this safely.
|
||
String fechaCortaLocalizada(String localeTag, DateTime fecha) =>
|
||
DateFormat.yMd(localeTag).format(fecha);
|
||
|
||
/// Day + abbreviated month, locale-aware (e.g. "28 jul" for `es`, "Jul 28"
|
||
/// for `en`) — item 21 / audit 9b.4 (t4:459), the big digit half of the
|
||
/// vacation screen's date-pair.
|
||
String diaMesLocalizado(String localeTag, DateTime fecha) =>
|
||
DateFormat.MMMd(localeTag).format(fecha);
|
||
|
||
/// Full weekday name, locale-aware (e.g. "lunes"/"Monday") — item 21 /
|
||
/// audit 9b.4 (t4:459), the small caption under the day-month.
|
||
String nombreDiaSemanaLocalizado(String localeTag, DateTime fecha) =>
|
||
DateFormat.EEEE(localeTag).format(fecha);
|
||
|
||
/// Full weekday + month + day, locale-aware (e.g. "lunes, 3 de agosto" for
|
||
/// `es`, "Monday, August 3" for `en`) — audit 9.4 (t4:419), the ringing
|
||
/// screen's date line between the schedule pill and the hero time.
|
||
String fechaLargaConDiaSemana(String localeTag, DateTime fecha) =>
|
||
DateFormat.MMMMEEEEd(localeTag).format(fecha);
|
||
|
||
/// Short "d–d MON" range pill, locale-aware month abbreviation, uppercased
|
||
/// (e.g. "4–18 AGO" for `es`, "4–18 AUG" for `en`) — audit 7.3 (t4:332),
|
||
/// the vacation-row date-range pill on the Alarmas root. Always labels the
|
||
/// range with the END date's month: vacation ranges are short (days to a
|
||
/// couple of weeks), so a cross-month span is the rare case, and the
|
||
/// prototype itself only ever shows a single abbreviation.
|
||
String rangoFechasCorto(String localeTag, DateTime inicio, DateTime fin) {
|
||
final dia = DateFormat.d(localeTag);
|
||
final mes = DateFormat.MMM(localeTag).format(fin).toUpperCase();
|
||
return '${dia.format(inicio)}–${dia.format(fin)} $mes';
|
||
}
|