fix(i18n): normalize translations and fallbacks
Build & Deploy PluriWave / Análisis de código (push) Successful in 38s
Build & Deploy PluriWave / Build APK + AAB release (push) Successful in 2m34s

This commit is contained in:
2026-06-03 21:20:08 +02:00
parent a5475ce118
commit 089b8b4227
46 changed files with 17720 additions and 4869 deletions
+20 -5
View File
@@ -1,8 +1,11 @@
import 'dart:async';
import 'dart:ui' show Locale;
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import '../l10n/display_names.dart';
import '../l10n/gen/app_localizations.dart';
import '../modelos/alarma_musical.dart';
class EventoAlarmaAndroid {
@@ -114,6 +117,17 @@ class ServicioAlarmasAndroid implements PuertoAlarmasAndroid {
static final _eventosController =
StreamController<EventoAlarmaAndroid>.broadcast();
static bool _handlerInstalado = false;
static AppLocalizations? _l10n;
static AppLocalizations get _textos {
final actual = _l10n;
if (actual != null) return actual;
return lookupAppLocalizations(const Locale('es'));
}
static void configurarLocalizaciones(AppLocalizations l10n) {
_l10n = l10n;
}
@override
Stream<EventoAlarmaAndroid> get eventosAlarma => _eventosController.stream;
@@ -133,7 +147,7 @@ class ServicioAlarmasAndroid implements PuertoAlarmasAndroid {
);
final programada = await _channel.invokeMethod<bool>('scheduleAlarm', {
'id': alarma.id,
'title': alarma.nombre,
'title': localizedAlarmName(_textos, alarma.nombre),
'triggerAtMillis': proxima.millisecondsSinceEpoch,
'preNoticeAtMillis':
alarma.snoozeHasta == null
@@ -150,15 +164,16 @@ class ServicioAlarmasAndroid implements PuertoAlarmasAndroid {
'lastHandledAtMillis':
alarma.ultimaEjecucionGestionada?.millisecondsSinceEpoch,
'soundOnVacation': alarma.sonarEnVacaciones,
'stationName': alarma.emisora?.nombre,
'stationName':
alarma.emisora == null
? null
: localizedStationName(_textos, alarma.emisora!.nombre),
'stationUrl': alarma.emisora?.url,
'fallbackSound': alarma.sonidoInterno.name,
'volume': alarma.volumen,
});
if (programada != true) {
throw StateError(
'Android no pudo programar una alarma exacta. Revisa el permiso de alarmas exactas.',
);
throw StateError(_textos.androidExactAlarmScheduleError);
}
}