Files
hackathon-heavy-gears-7cc00…/lib/notificaciones_service.dart
2026-05-22 23:18:37 -06:00

53 lines
1.9 KiB
Dart

import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class NotificacionesService {
// Instancia única (Singleton)
static final NotificacionesService _instance = NotificacionesService._internal();
factory NotificacionesService() => _instance;
NotificacionesService._internal();
final FlutterLocalNotificationsPlugin _localNotificationsPlugin = FlutterLocalNotificationsPlugin();
// Inicializa el sistema de alertas del teléfono
Future<void> inicializarNotificaciones() async {
const AndroidInitializationSettings androidSettings =
AndroidInitializationSettings('@mipmap/ic_launcher'); // Icono por defecto de tu app Android
const InitializationSettings initSettings = InitializationSettings(
android: androidSettings,
);
// SOLUCIÓN: En las versiones actuales se debe pasar como argumento con nombre 'settings:'
await _localNotificationsPlugin.initialize(
initSettings,
// Si en un futuro necesitas reaccionar cuando el usuario presiona la notificación:
// onDidReceiveNotificationResponse: (NotificationResponse response) { ... }
);
}
// Método genérico para disparar la alerta nativa en Android/iOS
Future<void> mostrarNotificacionPush({
required int id,
required String titulo,
required String mensaje,
}) async {
const AndroidNotificationDetails androidDetails = AndroidNotificationDetails(
'canal_alertas_operativas', // ID del canal
'Alertas Operativas Camión', // Nombre del canal visible para el usuario
channelDescription: 'Avisos de rutas, aproximaciones e imprevistos mecánicos',
importance: Importance.max,
priority: Priority.high,
playSound: true,
);
const NotificationDetails platformDetails = NotificationDetails(
android: androidDetails,
);
await _localNotificationsPlugin.show(
id,
titulo,
mensaje,
platformDetails,
);
}
}