feat(app): add onboarding and harden alarms
This commit is contained in:
+21
-2
@@ -16,6 +16,7 @@ import 'tema/pluriwave_theme.dart';
|
||||
import 'widgets/pluri_bottom_navigation.dart';
|
||||
import 'widgets/pluri_icon.dart';
|
||||
import 'widgets/pluri_layout.dart';
|
||||
import 'widgets/pluri_onboarding_dialog.dart';
|
||||
import 'widgets/pluri_wave_scaffold.dart';
|
||||
import 'package:pluriwave/widgets/mini_reproductor.dart';
|
||||
import 'servicios/servicio_alarmas_android.dart';
|
||||
@@ -64,6 +65,7 @@ class _PaginaPrincipalState extends State<_PaginaPrincipal> {
|
||||
EstadoRadio? _estadoSuscrito;
|
||||
bool _alarmaInicialProcesada = false;
|
||||
bool _alarmaSonandoActiva = false;
|
||||
bool _onboardingInicialSolicitado = false;
|
||||
String? _alarmaSonandoId;
|
||||
|
||||
static const _paginas = [
|
||||
@@ -120,6 +122,10 @@ class _PaginaPrincipalState extends State<_PaginaPrincipal> {
|
||||
_alarmaInicialProcesada = true;
|
||||
unawaited(_procesarAlarmaInicial(alarmas));
|
||||
}
|
||||
if (!_onboardingInicialSolicitado) {
|
||||
_onboardingInicialSolicitado = true;
|
||||
unawaited(_mostrarOnboardingInicial());
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -196,9 +202,17 @@ class _PaginaPrincipalState extends State<_PaginaPrincipal> {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _mostrarOnboardingInicial() async {
|
||||
await Future<void>.delayed(const Duration(milliseconds: 900));
|
||||
if (!mounted || _alarmaSonandoActiva) return;
|
||||
await PluriOnboardingDialog.mostrarSiProcede(context);
|
||||
}
|
||||
|
||||
Future<void> _abrirAlarmaSonando(EventoAlarmaAndroid evento) async {
|
||||
final estado = context.read<EstadoAlarmas>();
|
||||
await estado.refrescarProgramacion();
|
||||
if (estado.alarmas.isEmpty) {
|
||||
await estado.cargarPersistidasSinRecalcular();
|
||||
}
|
||||
AlarmaMusical? alarma;
|
||||
for (final item in estado.alarmas) {
|
||||
if (item.id == evento.alarmaId) {
|
||||
@@ -206,7 +220,12 @@ class _PaginaPrincipalState extends State<_PaginaPrincipal> {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (alarma == null || !mounted) return;
|
||||
if (alarma == null || !mounted) {
|
||||
debugPrint(
|
||||
'[PluriWave][alarmas] evento sin alarma persistida id=${evento.alarmaId} accion=${evento.accion}',
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (evento.accion.endsWith('.SKIP_NEXT')) {
|
||||
await estado.saltarProxima(alarma.id);
|
||||
if (!mounted) return;
|
||||
|
||||
Reference in New Issue
Block a user