import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; class NotificationService { static final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); static Future init() async { const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('logo'); const DarwinInitializationSettings initializationSettingsIOS = DarwinInitializationSettings( requestAlertPermission: true, requestBadgePermission: true, requestSoundPermission: true, ); const InitializationSettings initializationSettings = InitializationSettings( android: initializationSettingsAndroid, iOS: initializationSettingsIOS, ); await flutterLocalNotificationsPlugin.initialize( initializationSettings, onDidReceiveNotificationResponse: (NotificationResponse response) { // Handle tap on notification debugPrint("🔔 Notification clicked: ${response.payload}"); }, ); // Listen when app is in foreground FirebaseMessaging.onMessage.listen((RemoteMessage message) { _showNotification(message); }); // Optional: listen when user taps notification while app is in background/terminated FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { debugPrint( "📲 App opened via notification: ${message.notification?.title}"); // Navigate to specific screen if needed }); } static Future _showNotification(RemoteMessage message) async { RemoteNotification? notification = message.notification; AndroidNotification? android = message.notification?.android; if (notification != null && android != null) { const AndroidNotificationDetails androidDetails = AndroidNotificationDetails( 'high_importance_channel', // Match with AndroidManifest.xml 'High Importance Notifications', channelDescription: 'Used for important notifications.', importance: Importance.max, priority: Priority.high, ); const NotificationDetails platformDetails = NotificationDetails(android: androidDetails); await flutterLocalNotificationsPlugin.show( notification.hashCode, notification.title, notification.body, platformDetails, ); } } }