feat(alarmas): surface scheduling failures on the alarm card
Wires EstadoAlarmas.ultimaExcepcionPara into PantallaAlarmas: an alarm with an outstanding scheduling-failure exception now shows a calm warning line (distinguishing a pre-notice-only failure from the alarm itself not being registered) with a tap target into the reliability diagnostics screen. The warning is its own small tap target nested inside the existing card InkWell, so tap-to-edit, swipe-to-delete and the hero "Saltar" chip are untouched. Adds alarmCardSchedulingFailedMessage/alarmCardPreNoticeFailedMessage to all 13 ARB locales with real per-language translations (verified against arb_parity_test and arb_anti_copy_test).
This commit is contained in:
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "متوقفة مؤقتًا بسبب الإجازة",
|
||||
"alarmCardSchedulingFailedMessage": "لم يتم تسجيل هذا المنبه في النظام، لذا قد لا يرن.",
|
||||
"alarmCardPreNoticeFailedMessage": "تمت جدولة هذا المنبه، لكن تعذّر ضبط تذكيره المسبق.",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "جدولة المنبه بدقة",
|
||||
"alarmDiagnosticsExactAlarmsHint": "يتيح رنين المنبه في الدقيقة المحددة تمامًا، حتى عندما يكون الهاتف في وضع السكون.",
|
||||
"alarmDiagnosticsNotificationsTitle": "الإشعارات",
|
||||
|
||||
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "ছুটির কারণে বিরত",
|
||||
"alarmCardSchedulingFailedMessage": "এই অ্যালার্মটি সিস্টেমে নিবন্ধন করা যায়নি, তাই এটি নাও বাজতে পারে।",
|
||||
"alarmCardPreNoticeFailedMessage": "এই অ্যালার্মটি নির্ধারিত হয়েছে, তবে এর আগাম রিমাইন্ডার সেট করা যায়নি।",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "নির্ভুল অ্যালার্ম শিডিউলিং",
|
||||
"alarmDiagnosticsExactAlarmsHint": "ফোন ঘুমন্ত অবস্থায় থাকলেও অ্যালার্মকে ঠিক নির্ধারিত মিনিটে বাজতে দেয়।",
|
||||
"alarmDiagnosticsNotificationsTitle": "বিজ্ঞপ্তি",
|
||||
|
||||
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "Wegen Urlaub pausiert",
|
||||
"alarmCardSchedulingFailedMessage": "Dieser Alarm konnte nicht im System registriert werden, daher klingelt er möglicherweise nicht.",
|
||||
"alarmCardPreNoticeFailedMessage": "Dieser Alarm ist geplant, aber seine Vorwarnung konnte nicht eingerichtet werden.",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "Genaue Alarmplanung",
|
||||
"alarmDiagnosticsExactAlarmsHint": "Lässt den Alarm genau zur eingestellten Minute klingeln, auch wenn das Telefon im Ruhezustand ist.",
|
||||
"alarmDiagnosticsNotificationsTitle": "Benachrichtigungen",
|
||||
|
||||
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "Paused for vacation",
|
||||
"alarmCardSchedulingFailedMessage": "This alarm could not be registered with the system, so it may not ring.",
|
||||
"alarmCardPreNoticeFailedMessage": "This alarm is scheduled, but its early reminder could not be set.",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "Exact alarm scheduling",
|
||||
"alarmDiagnosticsExactAlarmsHint": "Lets the alarm ring at the exact minute you set, even while the phone is asleep.",
|
||||
"alarmDiagnosticsNotificationsTitle": "Notifications",
|
||||
|
||||
@@ -801,6 +801,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "Pausada por vacaciones",
|
||||
"alarmCardSchedulingFailedMessage": "Esta alarma no se pudo registrar en el sistema, así que podría no sonar.",
|
||||
"alarmCardPreNoticeFailedMessage": "Esta alarma está programada, pero no se pudo activar su aviso previo.",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "Programación de alarma exacta",
|
||||
"alarmDiagnosticsExactAlarmsHint": "Permite que la alarma suene en el minuto exacto que elegiste, incluso con el teléfono en reposo.",
|
||||
"alarmDiagnosticsNotificationsTitle": "Notificaciones",
|
||||
|
||||
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "En pause pour les vacances",
|
||||
"alarmCardSchedulingFailedMessage": "Cette alarme n'a pas pu être enregistrée dans le système ; elle risque donc de ne pas sonner.",
|
||||
"alarmCardPreNoticeFailedMessage": "Cette alarme est programmée, mais son rappel anticipé n'a pas pu être activé.",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "Programmation d'alarme précise",
|
||||
"alarmDiagnosticsExactAlarmsHint": "Permet à l'alarme de sonner à la minute exacte choisie, même si le téléphone est en veille.",
|
||||
"alarmDiagnosticsNotificationsTitle": "Notifications",
|
||||
|
||||
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "छुट्टी के कारण रोका गया",
|
||||
"alarmCardSchedulingFailedMessage": "यह अलार्म सिस्टम में दर्ज नहीं हो सका, इसलिए यह शायद न बजे।",
|
||||
"alarmCardPreNoticeFailedMessage": "यह अलार्म शेड्यूल किया गया है, लेकिन इसकी पूर्व-चेतावनी सेट नहीं हो सकी।",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "सटीक अलार्म शेड्यूलिंग",
|
||||
"alarmDiagnosticsExactAlarmsHint": "फ़ोन के सुप्त मोड में होने पर भी अलार्म को ठीक तय किए गए मिनट पर बजने देता है।",
|
||||
"alarmDiagnosticsNotificationsTitle": "सूचनाएं",
|
||||
|
||||
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "Dijeda karena liburan",
|
||||
"alarmCardSchedulingFailedMessage": "Alarm ini tidak dapat didaftarkan ke sistem, sehingga mungkin tidak berbunyi.",
|
||||
"alarmCardPreNoticeFailedMessage": "Alarm ini sudah dijadwalkan, tetapi pengingat awalnya tidak dapat diatur.",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "Penjadwalan alarm presisi",
|
||||
"alarmDiagnosticsExactAlarmsHint": "Membuat alarm berbunyi tepat pada menit yang kamu atur, meski ponsel dalam mode tidur.",
|
||||
"alarmDiagnosticsNotificationsTitle": "Notifikasi",
|
||||
|
||||
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "In pausa per le vacanze",
|
||||
"alarmCardSchedulingFailedMessage": "Questa sveglia non è stata registrata nel sistema, quindi potrebbe non suonare.",
|
||||
"alarmCardPreNoticeFailedMessage": "Questa sveglia è programmata, ma non è stato possibile impostare il promemoria anticipato.",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "Programmazione sveglia esatta",
|
||||
"alarmDiagnosticsExactAlarmsHint": "Permette alla sveglia di suonare esattamente al minuto impostato, anche a telefono in stand-by.",
|
||||
"alarmDiagnosticsNotificationsTitle": "Notifiche",
|
||||
|
||||
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "休暇のため一時停止中",
|
||||
"alarmCardSchedulingFailedMessage": "このアラームはシステムに登録できなかったため、鳴らない可能性があります。",
|
||||
"alarmCardPreNoticeFailedMessage": "このアラームは設定されていますが、事前通知を設定できませんでした。",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "正確なアラームのスケジュール設定",
|
||||
"alarmDiagnosticsExactAlarmsHint": "スマートフォンがスリープ中でも、設定した時刻ちょうどにアラームを鳴らせるようにします。",
|
||||
"alarmDiagnosticsNotificationsTitle": "通知",
|
||||
|
||||
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "Pausada por férias",
|
||||
"alarmCardSchedulingFailedMessage": "Este alarme não pôde ser registrado no sistema, por isso pode não tocar.",
|
||||
"alarmCardPreNoticeFailedMessage": "Este alarme está agendado, mas seu aviso antecipado não pôde ser configurado.",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "Agendamento exato do alarme",
|
||||
"alarmDiagnosticsExactAlarmsHint": "Permite que o alarme toque no minuto exato definido, mesmo com o telefone em repouso.",
|
||||
"alarmDiagnosticsNotificationsTitle": "Notificações",
|
||||
|
||||
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "Приостановлено на время отпуска",
|
||||
"alarmCardSchedulingFailedMessage": "Этот будильник не удалось зарегистрировать в системе, поэтому он может не сработать.",
|
||||
"alarmCardPreNoticeFailedMessage": "Этот будильник запланирован, но не удалось настроить предварительное напоминание.",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "Точное планирование будильника",
|
||||
"alarmDiagnosticsExactAlarmsHint": "Будильник звонит ровно в заданную минуту, даже если телефон находится в режиме сна.",
|
||||
"alarmDiagnosticsNotificationsTitle": "Уведомления",
|
||||
|
||||
@@ -842,6 +842,8 @@
|
||||
}
|
||||
},
|
||||
"alarmCardVacationPausedBadge": "因假期已暂停",
|
||||
"alarmCardSchedulingFailedMessage": "该闹钟未能在系统中注册,因此可能不会响铃。",
|
||||
"alarmCardPreNoticeFailedMessage": "该闹钟已设置,但其提前提醒未能设置成功。",
|
||||
"alarmDiagnosticsExactAlarmsTitle": "精确闹钟排程",
|
||||
"alarmDiagnosticsExactAlarmsHint": "即使手机处于休眠状态,也能让闹钟在设定的准确时间响起。",
|
||||
"alarmDiagnosticsNotificationsTitle": "通知",
|
||||
|
||||
@@ -3074,6 +3074,18 @@ abstract class AppLocalizations {
|
||||
/// **'Pausada por vacaciones'**
|
||||
String get alarmCardVacationPausedBadge;
|
||||
|
||||
/// No description provided for @alarmCardSchedulingFailedMessage.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Esta alarma no se pudo registrar en el sistema, así que podría no sonar.'**
|
||||
String get alarmCardSchedulingFailedMessage;
|
||||
|
||||
/// No description provided for @alarmCardPreNoticeFailedMessage.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Esta alarma está programada, pero no se pudo activar su aviso previo.'**
|
||||
String get alarmCardPreNoticeFailedMessage;
|
||||
|
||||
/// No description provided for @alarmDiagnosticsExactAlarmsTitle.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
|
||||
@@ -1691,6 +1691,14 @@ class AppLocalizationsAr extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => 'متوقفة مؤقتًا بسبب الإجازة';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'لم يتم تسجيل هذا المنبه في النظام، لذا قد لا يرن.';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'تمت جدولة هذا المنبه، لكن تعذّر ضبط تذكيره المسبق.';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle => 'جدولة المنبه بدقة';
|
||||
|
||||
|
||||
@@ -1700,6 +1700,14 @@ class AppLocalizationsBn extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => 'ছুটির কারণে বিরত';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'এই অ্যালার্মটি সিস্টেমে নিবন্ধন করা যায়নি, তাই এটি নাও বাজতে পারে।';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'এই অ্যালার্মটি নির্ধারিত হয়েছে, তবে এর আগাম রিমাইন্ডার সেট করা যায়নি।';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle => 'নির্ভুল অ্যালার্ম শিডিউলিং';
|
||||
|
||||
|
||||
@@ -1713,6 +1713,14 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => 'Wegen Urlaub pausiert';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'Dieser Alarm konnte nicht im System registriert werden, daher klingelt er möglicherweise nicht.';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'Dieser Alarm ist geplant, aber seine Vorwarnung konnte nicht eingerichtet werden.';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle => 'Genaue Alarmplanung';
|
||||
|
||||
|
||||
@@ -1693,6 +1693,14 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => 'Paused for vacation';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'This alarm could not be registered with the system, so it may not ring.';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'This alarm is scheduled, but its early reminder could not be set.';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle => 'Exact alarm scheduling';
|
||||
|
||||
|
||||
@@ -1707,6 +1707,14 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => 'Pausada por vacaciones';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'Esta alarma no se pudo registrar en el sistema, así que podría no sonar.';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'Esta alarma está programada, pero no se pudo activar su aviso previo.';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle =>
|
||||
'Programación de alarma exacta';
|
||||
|
||||
@@ -1716,6 +1716,14 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => 'En pause pour les vacances';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'Cette alarme n\'a pas pu être enregistrée dans le système ; elle risque donc de ne pas sonner.';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'Cette alarme est programmée, mais son rappel anticipé n\'a pas pu être activé.';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle =>
|
||||
'Programmation d\'alarme précise';
|
||||
|
||||
@@ -1695,6 +1695,14 @@ class AppLocalizationsHi extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => 'छुट्टी के कारण रोका गया';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'यह अलार्म सिस्टम में दर्ज नहीं हो सका, इसलिए यह शायद न बजे।';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'यह अलार्म शेड्यूल किया गया है, लेकिन इसकी पूर्व-चेतावनी सेट नहीं हो सकी।';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle => 'सटीक अलार्म शेड्यूलिंग';
|
||||
|
||||
|
||||
@@ -1703,6 +1703,14 @@ class AppLocalizationsId extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => 'Dijeda karena liburan';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'Alarm ini tidak dapat didaftarkan ke sistem, sehingga mungkin tidak berbunyi.';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'Alarm ini sudah dijadwalkan, tetapi pengingat awalnya tidak dapat diatur.';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle => 'Penjadwalan alarm presisi';
|
||||
|
||||
|
||||
@@ -1715,6 +1715,14 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => 'In pausa per le vacanze';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'Questa sveglia non è stata registrata nel sistema, quindi potrebbe non suonare.';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'Questa sveglia è programmata, ma non è stato possibile impostare il promemoria anticipato.';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle =>
|
||||
'Programmazione sveglia esatta';
|
||||
|
||||
@@ -1646,6 +1646,14 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => '休暇のため一時停止中';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'このアラームはシステムに登録できなかったため、鳴らない可能性があります。';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'このアラームは設定されていますが、事前通知を設定できませんでした。';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle => '正確なアラームのスケジュール設定';
|
||||
|
||||
|
||||
@@ -1703,6 +1703,14 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => 'Pausada por férias';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'Este alarme não pôde ser registrado no sistema, por isso pode não tocar.';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'Este alarme está agendado, mas seu aviso antecipado não pôde ser configurado.';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle => 'Agendamento exato do alarme';
|
||||
|
||||
|
||||
@@ -1707,6 +1707,14 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => 'Приостановлено на время отпуска';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage =>
|
||||
'Этот будильник не удалось зарегистрировать в системе, поэтому он может не сработать.';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage =>
|
||||
'Этот будильник запланирован, но не удалось настроить предварительное напоминание.';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle =>
|
||||
'Точное планирование будильника';
|
||||
|
||||
@@ -1638,6 +1638,12 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
@override
|
||||
String get alarmCardVacationPausedBadge => '因假期已暂停';
|
||||
|
||||
@override
|
||||
String get alarmCardSchedulingFailedMessage => '该闹钟未能在系统中注册,因此可能不会响铃。';
|
||||
|
||||
@override
|
||||
String get alarmCardPreNoticeFailedMessage => '该闹钟已设置,但其提前提醒未能设置成功。';
|
||||
|
||||
@override
|
||||
String get alarmDiagnosticsExactAlarmsTitle => '精确闹钟排程';
|
||||
|
||||
|
||||
@@ -286,6 +286,20 @@ class _TarjetaAlarma extends StatelessWidget {
|
||||
if (pausadaPorVacaciones) l10n.alarmCardVacationPausedBadge,
|
||||
];
|
||||
|
||||
// fix/alarmas-fallos-silenciosos: `ultimaExcepcionPara` existed but was
|
||||
// never read from any screen, so a failed native scheduling attempt (main
|
||||
// alarm, pre-notice, foreground service, or a post-boot reschedule)
|
||||
// rendered exactly like a healthy alarm -- switched on, no visible sign
|
||||
// anything was wrong. `_esValida` only ever treats `tipoSaltoSiguiente`
|
||||
// as a real skip, so any OTHER tipo found here is a reliability failure,
|
||||
// never a deliberate user action.
|
||||
final ultimaExcepcion = estado.ultimaExcepcionPara(alarma.id);
|
||||
final fallo =
|
||||
ultimaExcepcion != null &&
|
||||
ExcepcionAlarma.tiposFallo.contains(ultimaExcepcion.tipo)
|
||||
? ultimaExcepcion
|
||||
: null;
|
||||
|
||||
return Dismissible(
|
||||
key: ValueKey('tarjeta-alarma-${alarma.id}'),
|
||||
direction: DismissDirection.horizontal,
|
||||
@@ -417,6 +431,14 @@ class _TarjetaAlarma extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
],
|
||||
if (fallo != null) ...[
|
||||
const SizedBox(height: 6),
|
||||
_AvisoFalloProgramacion(
|
||||
alarmaId: alarma.id,
|
||||
esSoloPreaviso:
|
||||
fallo.tipo == ExcepcionAlarma.tipoFalloPreaviso,
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -470,6 +492,82 @@ class _TarjetaAlarma extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
/// Per-alarm scheduling-failure notice (fix/alarmas-fallos-silenciosos):
|
||||
/// renders INSIDE the card's own content, in its own small tap target --
|
||||
/// the surrounding card `InkWell` (tap = edit) and `Dismissible` (swipe =
|
||||
/// delete) are untouched; this inner `InkWell` only claims its own region
|
||||
/// and pushes the diagnostics screen instead of opening the editor.
|
||||
class _AvisoFalloProgramacion extends StatelessWidget {
|
||||
const _AvisoFalloProgramacion({
|
||||
required this.alarmaId,
|
||||
required this.esSoloPreaviso,
|
||||
});
|
||||
|
||||
final String alarmaId;
|
||||
|
||||
/// True when only the pre-notice reminder failed (the alarm itself is
|
||||
/// still scheduled) -- the user's reported symptom explicitly called out
|
||||
/// a missing pre-notice as distinct from the alarm never ringing at all,
|
||||
/// so the message must not conflate the two.
|
||||
final bool esSoloPreaviso;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context);
|
||||
final color = Theme.of(context).colorScheme.error;
|
||||
return Material(
|
||||
type: MaterialType.transparency,
|
||||
child: InkWell(
|
||||
key: ValueKey('tarjeta-alarma-fallo-$alarmaId'),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
onTap: () => _abrirDiagnostico(context),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 2),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Icon(Icons.warning_amber_rounded, size: 15, color: color),
|
||||
const SizedBox(width: 6),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
esSoloPreaviso
|
||||
? l10n.alarmCardPreNoticeFailedMessage
|
||||
: l10n.alarmCardSchedulingFailedMessage,
|
||||
style: TextStyle(
|
||||
fontSize: 11,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: color,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 2),
|
||||
Text(
|
||||
l10n.androidReliabilityReview,
|
||||
style: TextStyle(
|
||||
fontSize: 11,
|
||||
fontWeight: FontWeight.w800,
|
||||
color: color,
|
||||
decoration: TextDecoration.underline,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _abrirDiagnostico(BuildContext context) {
|
||||
PluriPushScaffold.push(context, (_) => const PantallaDiagnosticoAlarmas());
|
||||
}
|
||||
}
|
||||
|
||||
/// Swipe-to-delete reveal, shown on both sides so either swipe direction
|
||||
/// works regardless of locale text direction.
|
||||
class _FondoSwipeEliminarAlarma extends StatelessWidget {
|
||||
|
||||
Reference in New Issue
Block a user