import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../core/config/app_config.dart'; import '../../../../core/services/notification_service.dart'; import '../../domain/entities/app_notification.dart'; /// Global local notifications plugin instance (initialized in main.dart). final localNotificationsPluginProvider = Provider((ref) { return FlutterLocalNotificationsPlugin(); }); /// Notification service singleton. final notificationServiceProvider = Provider((ref) { final config = ref.watch(appConfigProvider); final plugin = ref.watch(localNotificationsPluginProvider); return NotificationService( baseUrl: config.apiBaseUrl, localNotifications: plugin, ); }); /// Accumulated notification list. class NotificationListNotifier extends StateNotifier> { NotificationListNotifier() : super([]); void add(AppNotification notification) { state = [notification, ...state]; } void markRead(String id) { state = state.map((n) { if (n.id == id) return n.copyWith(isRead: true); return n; }).toList(); } void markAllRead() { state = state.map((n) => n.copyWith(isRead: true)).toList(); } void clear() { state = []; } } final notificationListProvider = StateNotifierProvider>( (ref) { return NotificationListNotifier(); }); /// Unread notification count. final unreadNotificationCountProvider = Provider((ref) { final notifications = ref.watch(notificationListProvider); return notifications.where((n) => !n.isRead).length; });