implements notification

This commit is contained in:
2025-04-24 18:48:12 +05:30
parent 31cc1b9c15
commit 029b71a247
34 changed files with 1724 additions and 705 deletions

View File

@@ -0,0 +1,73 @@
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<void> init() async {
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('@mipmap/ic_launcher');
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<void> _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,
);
}
}
}