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 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 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, ); } }