import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; class NotificationController extends GetxController { var notifications = >[].obs; // List of notifications late FlutterLocalNotificationsPlugin localNotifications; @override void onInit() { super.onInit(); initNotifications(); } void initNotifications() async { localNotifications = FlutterLocalNotificationsPlugin(); const androidSettings = AndroidInitializationSettings('@mipmap/ic_launcher'); const iosSettings = DarwinInitializationSettings(); // Updated for iOS await localNotifications.initialize( const InitializationSettings(android: androidSettings, iOS: iosSettings), ); // Listen for FCM foreground messages FirebaseMessaging.onMessage.listen((message) { showNotification(message); notifications.insert(0, { 'title': message.notification?.title ?? '', 'body': message.notification?.body ?? '', }); update(); }); } void showNotification(RemoteMessage message) async { const androidDetails = AndroidNotificationDetails( 'channelId', 'channelName', importance: Importance.max, priority: Priority.high, ); const iosDetails = DarwinNotificationDetails(); // Updated for iOS const generalNotificationDetails = NotificationDetails(android: androidDetails, iOS: iosDetails); await localNotifications.show( 0, message.notification?.title ?? '', message.notification?.body ?? '', generalNotificationDetails, ); } } class NotificationPage extends StatelessWidget { final NotificationController controller = Get.put(NotificationController()); NotificationPage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Notifications'), centerTitle: true, ), body: Obx(() { if (controller.notifications.isEmpty) { return const Center(child: Text("No notifications yet")); } return ListView.builder( itemCount: controller.notifications.length, itemBuilder: (context, index) { final notification = controller.notifications[index]; return ListTile( leading: const Icon(Icons.notifications), title: Text(notification['title'] ?? ''), subtitle: Text(notification['body'] ?? ''), ); }, ); }), ); } }