fix(alarms): harden native alarm lifecycle
This commit is contained in:
@@ -68,6 +68,25 @@ class DiagnosticoAlarmasAndroid {
|
||||
}
|
||||
}
|
||||
|
||||
class EjecucionAlarmaNativa {
|
||||
const EjecucionAlarmaNativa({
|
||||
required this.alarmaId,
|
||||
required this.gestionadaEn,
|
||||
});
|
||||
|
||||
final String alarmaId;
|
||||
final DateTime gestionadaEn;
|
||||
|
||||
factory EjecucionAlarmaNativa.fromMap(Map<Object?, Object?> map) {
|
||||
return EjecucionAlarmaNativa(
|
||||
alarmaId: map['alarmId'] as String? ?? '',
|
||||
gestionadaEn: DateTime.fromMillisecondsSinceEpoch(
|
||||
(map['handledAtMillis'] as num?)?.toInt() ?? 0,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
abstract class PuertoAlarmasAndroid {
|
||||
Stream<EventoAlarmaAndroid> get eventosAlarma;
|
||||
|
||||
@@ -81,6 +100,7 @@ abstract class PuertoAlarmasAndroid {
|
||||
Future<void> confirmarAudioFlutter(String alarmaId);
|
||||
Future<DiagnosticoAlarmasAndroid> diagnostico();
|
||||
Future<EventoAlarmaAndroid?> obtenerEventoInicial();
|
||||
Future<List<EjecucionAlarmaNativa>> obtenerEjecucionesNativasGestionadas();
|
||||
}
|
||||
|
||||
class ServicioAlarmasAndroid implements PuertoAlarmasAndroid {
|
||||
@@ -208,6 +228,24 @@ class ServicioAlarmasAndroid implements PuertoAlarmasAndroid {
|
||||
return evento.alarmaId.isEmpty ? null : evento;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<EjecucionAlarmaNativa>>
|
||||
obtenerEjecucionesNativasGestionadas() async {
|
||||
final raw = await _channel.invokeMethod<List<Object?>>(
|
||||
'getHandledAlarmOccurrences',
|
||||
);
|
||||
if (raw == null || raw.isEmpty) return const [];
|
||||
return raw
|
||||
.whereType<Map<Object?, Object?>>()
|
||||
.map(EjecucionAlarmaNativa.fromMap)
|
||||
.where(
|
||||
(evento) =>
|
||||
evento.alarmaId.isNotEmpty &&
|
||||
evento.gestionadaEn.millisecondsSinceEpoch > 0,
|
||||
)
|
||||
.toList();
|
||||
}
|
||||
|
||||
Future<void> _logAndInvokeVoid(String method, Map<String, Object?> args) {
|
||||
debugPrint('[PluriWave][alarmas] $method $args');
|
||||
return _channel.invokeMethod<void>(method, args);
|
||||
|
||||
Reference in New Issue
Block a user