53 lines
1.9 KiB
Dart
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,
|
|
);
|
|
}
|
|
} |